Основним параметром для налаштування використання пам'яті Apache буде MaxClients
. Занадто низьке значення, і вам не вистачить доступних слотів для обслуговування запитів клієнтів. Забагато, і ви будете використовувати всю свою оперативну пам’ять і починати використовувати простір swap, що знищить продуктивність (може здатися, що це збій сервера).
Один із способів налаштування MaxClients
- спостерігати за використанням пам'яті системи та налаштовувати налаштування / вниз при необхідності. Якщо сервер починає міняти його, відредагуйте його. Якщо у сервера вільна пам'ять, поставте його.
Ви також можете оцінити максимальне значення, переглянувши використання пам'яті Apache. Почніть top
і натисніть, M
щоб сортувати процеси за пам'яттю. Ви повинні побачити щось на кшталт:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Віднімайте стовпці RES та SHR, щоб отримати приблизне використання пам'яті на примірник Apache. У цьому випадку це близько 16 Мб. Якщо у мене є 4 Гб оперативної пам’яті і я хочу, щоб 3 ГБ було використано для Apache, моє налаштування MaxClients буде приблизно:
MaxClients = 3000/16 = 188
Так, у цьому випадку я можу почати зі значення 150-200, але я б спостерігав за використанням пам'яті, і якщо вона коли-небудь почала наближатися до використання swap, я знижую MaxClients на 10-20%. Також зауважте, що значення 3 Гб - лише випадковий приклад. На серверах, на яких працює тільки Apache, я міг би використовувати майже всі 4 Гб. В інших випадках, можливо, потрібно лише 1 або 2 Гб для Apache, а решта збережеться для інших програм, системи або кеша.
Правка: відповіді на додаткові запитання
Як правило, немає магічних значень MaxClients або інших параметрів конфігурації Apache, які зроблять ваш сервер раптово вдвічі швидшим. Деякі сервери будуть працювати нормально, чи MaxClients становить 10 або 1000. Є два основні випадки, коли параметр MaxClients "поганий":
- Занадто низько : Коли MaxClients занадто низький, ви потрапите в ситуацію, коли всі клієнти Apache використовуються і нові з'єднання переходять у чергу, чекаючи, коли наступний клієнт стане доступним. Якщо ввімкнути mod_status Apache, ви можете отримати в режимі реального часу уявлення про кількість клієнтів, зайнятих в будь-який момент часу. Цей стан досить легко діагностувати, оскільки сайт стане повільним під час великого трафіку, і всі клієнти можуть спостерігати, як вони використовуються.
- Занадто високо : Коли MaxClients занадто високий, ви потрапите в випадок вичерпання всієї оперативної пам’яті і почнете використовувати своп. У цьому випадку продуктивність вашого сайту знизиться до нуля (врахуйте різницю швидкості між ОЗУ та диском). Цей стан може бути набагато складніше спостерігати і діагностувати, оскільки сервер буде працювати нормально з високим MaxClients, поки він не відчує сплеск трафіку. Наприклад, на сайті, що отримує кілька звернень за годину, я можу встановити MaxClients до 1000, що набагато більше, ніж підтримується оперативна пам’ять, але жодного разу не бачив проблеми, оскільки Apache потребував лише одного або двох клієнтів одночасно. Проблему я помітитиму лише тоді, коли отримаю сплеск трафіку, збільшивши кількість клієнтів, які одночасно використовуються, поки оперативна пам'ять не буде вичерпана та не потрібен обмін місцями.
Хоча я не знаю деталей вашого сервера, програми чи трафіку, я можу запропонувати наступні значення конфігурації як вихідну точку. Спробуйте їх, стежте за завантаженням та використанням сервера та змінюйте налаштування за потребою.
- mod_status : Увімкніть це, щоб ви могли бачити використання Apache. Для більш просунутої статистики встановіть додаток для моніторингу, як Zabbix / Nagios, щоб ви могли відслідковувати використання сервера та схему трафіку.
- MaxClients : встановлено значення 100-200. Я б почав з нижчого значення, якщо не впевнений і слідкує за використанням пам'яті / процесора / Apache. Це буде основним параметром для налаштування.
- MaxRequestsPerChild : Це визначає, коли клієнт / дитина Apache буде перезапущений. Неправильне значення (хоча дуже малі значення можуть бути неефективними), і це залежатиме від того, який вміст ви обслуговуєте. Для динамічного вмісту велике ненульове значення (скажімо 1000) зупинить ваші процеси httpd з часом стають занадто великими.
- Інші параметри : Хоча я не робив ретельного порівняльного оцінювання інших параметрів, вони повинні мати відносно незначний ефект, якщо ви не встановите їх на дуже низькі або дуже високі значення. Використання значень за замовчуванням має бути добре для більшості сайтів. Дивіться документацію модуля Apache Prefork або Worker для повного опису параметрів і використовуваних у кожному модулі (немає сенсу намагатися налаштувати параметр, який ви не використовуєте).
- Бенчмаркінг : Під час налаштування параметрів я рекомендую використовувати інструмент порівняльного аналізу, наприклад ab (ApacheBench) або облогу, щоб отримати кількісне число можливостей вашого сервера. Покладатися на солей на відчуття або гірше, бачити, виходить з ладу чи ні, не є гарним методом налаштування параметрів веб-сервера.