Як настроїти Apache на сервері Ubuntu 14.04


18

На даний момент у мого Apache 2 (точніше Apache 2.4.7) на Ubuntu 14.04 у мене є цей параметр:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

Сервер - це сервер Amazon на 8 Гб (ОЗУ), який не тільки завантажує тристорінкову форму реєстрації для деяких рекламних кампаній Google.

Я знайшов в Інтернеті сценарій під назвою apachetuneit.sh , але потім через деякий час Apache повідомив про цю помилку:

[Вт 21 квітня: 45: 42.227935 2015] [mpm_prefork: помилка] [pid 1134] AH00161: сервер досяг налаштування MaxRequestWorkers, розгляньте про підвищення параметра MaxRequestWorkers

Як я можу судити про те, як встановити ці налаштування?

Я запитую конкретно лише про те, як настроїти Apache 2.4 та більше нічого. Ось чому це питання відрізняється від цього .



@JennyD Ця стаття є занадто широкою для цієї конкретної потреби.
ServerChecker

Те, як ви судите про ці конкретні настройки, це те, що ви виконуєте тестування навантаження.
Дженні Д

@JennyD Це навіть простіше цього. Просто використовуйте скрипт ap.sh під регулярним завантаженням, кілька разів на день і середнє значення, виконайте математику за посиланням cloudinservice нижче та встановіть MaxRequestWorkers на це значення. Потім перегляньте журнали Apache для неполадок із MaxRequestWorkers та збільшуйте, додайте більше оперативної пам’яті, додайте CloudFlare або додайте інший веб-вузол. Не потрібно робити надзвичайно інтенсивне тестування навантаження.
ServerChecker

Ви можете написати відповідь, що містить інформацію про цей сценарій, та відповідні матеріали із посилань, які ви включили у власну відповідь, на питання, на яке я вказав, як на можливий дублікат.
Дженні Д

Відповіді:


45
  1. Визнайте, що Ubuntu 14.04 використовує Apache 2 з PHP, що працює через модуль mpm_prefork , з яких редагований файл знаходиться в /etc/apache2/mods-enabled/mpm_prefork.conf. Також визнайте , що починаючи з Apache 2.4, MaxClients тепер перейменовано на MaxRequestWorkers , і тому будь-яку документацію щодо MaxClients потрібно переключити на MaxRequestWorkers.

  2. Припиніть веб-сервіс Apache тимчасово виконати наступну команду:

    Служба судо апаш2 серп
  1. Зачекайте 5 секунд, а потім запустіть наступну команду, щоб дізнатися, скільки вільної пам'яті у вас на вільному сервері:
    судо вільний -хт

Прочитайте рядок Mem: і подивіться у вільну колонку. Розгляньте це як об'єм оперативної пам’яті, який ви можете виділити Apache, хоча я зазвичай люблю віднімати 2 Гб на сервері beefier (як у> 4 ГБ) або 1 ГБ на більш легкому сервері. Отже, якщо вільний стовпець сказав, що у мене є 13 ГБ безкоштовно, я б рекомендував дати Apache 11 ГБ. Це базовий рівень. Якщо ми стикаємося з будь-якою проблемою бази даних у журналах періодично (як, наприклад, 3 рази в журналах протягом 3-денного періоду), що їй потрібно більше пам’яті, то ми можемо врахувати, що у нас було лише 10 Гб для гри замість 11 ГБ (у цьому випадку ). Якщо ми зустрінемо в журналах Apache, що серверу потрібно більше MaxRequestWorkers, то це окрема проблема, яку я торкнуся нижче.

  1. Запустіть веб-сервер Apache.
    Служба судо
  1. Відкрийте, як 10 вкладок веб-переглядача, підключіться до деяких ваших довших або повільніше завантажуваних сторінок зі свого веб-сайту та оновлюйте, як 3-4 рази, на кожній вкладці.

  2. Після цього швидко виконайте таку команду:

    sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Використання пам'яті Apache (MB):" x / 1024; print "Середній розмір процесу (МБ):" x / ((y-1) * 1024)} '

Запускайте його як 5 разів швидко.

Подивіться на значення середнього розміру процесу та середнє значення, яке ви бачите серед 5 разів, де ви його провели.

Тепер виконайте наступну математику і обов'язково конвертуйте ГБ в МБ, якщо це необхідно, щоб усі числа були у значеннях МБ. Отже, або помножте на 1024 рази, або розділіть на 1024, залежно від того, яким шляхом вам потрібно пройти.

MaxRequestWorkers = Без базової лінії (з буферним простором) / Середній розмір процесу

Наприклад, у мене був 14 Гб сервер, але коли Apache був зупинений, сервер показав, що він використовував 1 Гб оперативної пам'яті в режимі очікування. Потім я надаю ще 1 Гб додаткового буферного простору для ОС, якщо він цього потребує. Це означає, що я мав би базову лінію 12 Гб. Тепер я повинен перетворити його з ГБ в МБ, і тому я помножую 12 х 1024 і отримую 12288. 12288 МБ - це моє базове значення. У моєму випадку я побачив, що середній розмір процесу - 21 Мб. Отже, я беру 12288/21, і я отримую приблизно 585. Зараз звичайно, що сисопи заокруглюють це значення, і тому я отримав 580.

  1. Відредагуйте файл /etc/apache2/mods-enabled/mpm_prefork.conf і подумайте про встановлення його на наступні параметри за замовчуванням, замінивши XXX на ваш розрахунок MaxRequestWorkers:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Зауважте, що ви, можливо, там не бачите параметр ServerLimit. Додайте його. Цей параметр за замовчуванням до 256, якщо його немає, але він повинен бути таким же значенням, як MaxRequestWorkers, або ви отримаєте помилку.

  1. Іншим критичним фактором у вашій конфігурації Apache є /etc/apache2/apache2.conf файл зі змінною Timeout і вимірюється в секундах. Це скільки часу ви можете надсилати або отримувати з сервера, перш ніж його вичерпати. Ви також повинні пам’ятати про завантаження або завантаження файлу, наприклад, якщо у вас є веб-сайт, на якому люди можуть завантажувати або завантажувати CSV або інші великі файли, наприклад. І вам потрібно пам’ятати про зайнятий сервер баз даних і де вам може знадобитися передбачити деякий час перед тимчасовим очікуванням сторінок. Чим менше ви зробите цю змінну Timeout, тим більше доступний веб-сервер для отримання нових з'єднань. Однак зауважте, що встановлення цього значення занадто низьке може спричинити хаос із змінними сеансів PHP, хоча не з файлами cookie на базі сеансу браузера. Так, наприклад, значення 300 (5 хвилин) може бути корисним для веб-сервера, який покладається на змінні сеансів PHP для робочого процесу веб-додатків замість файлів cookie сеансу браузера. Значення 45 може бути корисним для веб-сервера, який обслуговує не більше ніж статичні рекламні цільові сторінки, але буде жахливим для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів. але це було б страшно для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів. але це було б страшно для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів.

  2. Тепер перезапустіть веб-службу Apache. Якщо ви щось зробили не так, Apache, швидше за все, розповість вам про нього в той момент, коли ви запустили його знову, і ви зможете виправити це.

    перезапуск служби sudo служби apache2
  1. Тепер повторіть хитрість браузера на 10 вкладках, яку ви робили раніше, і подивіться, чи виникають помилки конфігурації Apache у журналі помилок веб-сервера Apache:
    судовий хвіст -f /var/log/apache2/error.log

... натисніть CTRL + C, щоб вийти з цього, якщо хочете.

Шукайте скаргу щодо необхідності MaxRequestWorkers (і нещодавно з моменту перезапуску веб-сервера). Якщо ви бачите, що навіть при оптимальному налаштуванні MaxRequestWorkers, вам, ймовірно, потрібно більше вогневої сили для ваших веб-сайтів або веб-додатків. Розглянемо такі варіанти:

  • Використання CDN для великих завантажень файлів, зображень та сценаріїв.
  • Використання послуги кешування, наприклад CloudFlare або інших.
  • Повторне перетворення веб-сайту або стратегії веб-додатків для використання декількох веб-серверів, які виступають в якості однієї "веб-програми" за балансиром навантаження.
  • Додавання більшої кількості оперативної пам’яті на сервер, що робить цей розрахунок заново.

  1. Тепер, коли налаштований сервер Apache, це налаштовано базову лінію. Вам потрібно буде перевірити це протягом 2-3 тижнів і шукати проблеми MaxRequestWorker у журналах помилок Apache. З цього ви можете прийняти рішення щодо оптимізації (див. Крок 10). Ви також можете встановити Munin з apt на Ubuntu і подивитися на ефективність Apache з часом і скласти уявлення про зростання, перш ніж вирішити, що вам потрібно зробити що-небудь щодо кількості трафіку, який обробляє веб-сервер.

"Хоча ці посилання можуть відповісти на питання, краще включити сюди основні частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться ».
Jenny D

@JennyD Добрий момент! Я це зроблю.
ServerChecker

@Moderator Мені потрібна допомога щодо форматування цієї відповіді. Крок 7 повинен був бути конф-файлом з відступами. Крок 11 не повинен був бути відступним. Кодові команди, які починаються з sudoнеобхідності, повинні відображатися як код, а не як звичайний текст. Я стежив за документацією щодо форматування, але все ще борюся тут.
ServerChecker

1
Я зробив усе, що міг - розмітка насправді не робить змішаних списків та коду дуже добре, але я думаю, що мені все-таки вдалося зробити це трохи краще.
Jenny D

для новачків centos, як я: ps -lyU apache замість ps -ylC apache2
user1928596

3

На що ви можете підняти MaxRequestWorkers, залежить від того, скільки оперативної пам’яті займає кожен ваш httpd / apache процес. Якщо кожен займає 50 Мб (просто вибираючи випадкове число), то кожні 20 запитуючих працівників, якими ви користуєтесь одразу (тобто одночасні з'єднання), займуть 1 Гб. Отже, у цьому прикладі у вас може бути не більше 8 ГБ * 20 = 160 MaxRequestWorkers. Однак ви не можете використовувати всю оперативну пам’ять для apache, вам потрібно зарезервувати частину інших функцій, що працюють там. Крім того, залишок запасної оперативної пам’яті може бути корисним для продуктивності, оскільки ОС буде використовувати її для кешування речей і прискорення продуктивності (хоча, можливо, краще не вичерпати з'єднання порівняно з тим, що сервер буде надто швидким, оскільки сайт буде здаватися повільним, тоді як браузери користувачів чекають, коли з'єднання стане доступним, якщо вони звикнуть).


Який хороший спосіб профайлювати це? Які команди я можу набрати, щоб побачити, скільки оперативної пам’яті використовує кожен процес апачі під навантаженням? Також нам потрібна кімната оперативної пам’яті для MySQL (веб-сайт WordPress) і звичайних системних процесів.
ServerChecker

Подивіться, скільки запущених процесів і запустіть freeкоманду, щоб отримати базову лінію пам'яті. Потім збільшити кількість запущених процесів, збільшивши MinSpareServers, перезапустивши апаш, запустивши freeзнову і зробивши математику. Перевірте moreofless.co.uk/apache-memory-usage для отримання більш детальної інформації та пояснень.
g491

Тепер я дізнався, що існує надзвичайно швидкий спосіб зробити це. Це викладено у посиланні cloudinservice.com у моїй відповіді нижче. Команда - це ap.sh, яку хтось з'ясував. Також я дізнався, що MaxClients тепер перейменовано на MaxRequestWorkers в Apache 2.4+.
ServerChecker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.