Визнайте, що Ubuntu 14.04 використовує Apache 2 з PHP, що працює через модуль mpm_prefork , з яких редагований файл знаходиться в /etc/apache2/mods-enabled/mpm_prefork.conf. Також визнайте , що починаючи з Apache 2.4, MaxClients тепер перейменовано на MaxRequestWorkers , і тому будь-яку документацію щодо MaxClients потрібно переключити на MaxRequestWorkers.
Припиніть веб-сервіс Apache тимчасово виконати наступну команду:
Служба судо апаш2 серп
- Зачекайте 5 секунд, а потім запустіть наступну команду, щоб дізнатися, скільки вільної пам'яті у вас на вільному сервері:
судо вільний -хт
Прочитайте рядок Mem: і подивіться у вільну колонку. Розгляньте це як об'єм оперативної пам’яті, який ви можете виділити Apache, хоча я зазвичай люблю віднімати 2 Гб на сервері beefier (як у> 4 ГБ) або 1 ГБ на більш легкому сервері. Отже, якщо вільний стовпець сказав, що у мене є 13 ГБ безкоштовно, я б рекомендував дати Apache 11 ГБ. Це базовий рівень. Якщо ми стикаємося з будь-якою проблемою бази даних у журналах періодично (як, наприклад, 3 рази в журналах протягом 3-денного періоду), що їй потрібно більше пам’яті, то ми можемо врахувати, що у нас було лише 10 Гб для гри замість 11 ГБ (у цьому випадку ). Якщо ми зустрінемо в журналах Apache, що серверу потрібно більше MaxRequestWorkers, то це окрема проблема, яку я торкнуся нижче.
- Запустіть веб-сервер Apache.
Служба судо
Відкрийте, як 10 вкладок веб-переглядача, підключіться до деяких ваших довших або повільніше завантажуваних сторінок зі свого веб-сайту та оновлюйте, як 3-4 рази, на кожній вкладці.
Після цього швидко виконайте таку команду:
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.
- Відредагуйте файл /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, або ви отримаєте помилку.
Іншим критичним фактором у вашій конфігурації Apache є /etc/apache2/apache2.conf файл зі змінною Timeout і вимірюється в секундах. Це скільки часу ви можете надсилати або отримувати з сервера, перш ніж його вичерпати. Ви також повинні пам’ятати про завантаження або завантаження файлу, наприклад, якщо у вас є веб-сайт, на якому люди можуть завантажувати або завантажувати CSV або інші великі файли, наприклад. І вам потрібно пам’ятати про зайнятий сервер баз даних і де вам може знадобитися передбачити деякий час перед тимчасовим очікуванням сторінок. Чим менше ви зробите цю змінну Timeout, тим більше доступний веб-сервер для отримання нових з'єднань. Однак зауважте, що встановлення цього значення занадто низьке може спричинити хаос із змінними сеансів PHP, хоча не з файлами cookie на базі сеансу браузера. Так, наприклад, значення 300 (5 хвилин) може бути корисним для веб-сервера, який покладається на змінні сеансів PHP для робочого процесу веб-додатків замість файлів cookie сеансу браузера. Значення 45 може бути корисним для веб-сервера, який обслуговує не більше ніж статичні рекламні цільові сторінки, але буде жахливим для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів. але це було б страшно для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів. але це було б страшно для сервера, який потребує великої кількості змінних PHP-сеансів. Отже, відредагуйте параметр Timeout у цьому файлі на необхідну суму. Це може пройти тестування на всіх ваших веб-сторінках, щоб побачити, чи значення занадто низьке. Однак, мабуть, гарна ідея не встановлювати його вище 300, якщо у вас не виникають проблеми з завантаженням великих файлів або завантаженням великих файлів.
Тепер перезапустіть веб-службу Apache. Якщо ви щось зробили не так, Apache, швидше за все, розповість вам про нього в той момент, коли ви запустили його знову, і ви зможете виправити це.
перезапуск служби sudo служби apache2
- Тепер повторіть хитрість браузера на 10 вкладках, яку ви робили раніше, і подивіться, чи виникають помилки конфігурації Apache у журналі помилок веб-сервера Apache:
судовий хвіст -f /var/log/apache2/error.log
... натисніть CTRL + C, щоб вийти з цього, якщо хочете.
Шукайте скаргу щодо необхідності MaxRequestWorkers (і нещодавно з моменту перезапуску веб-сервера). Якщо ви бачите, що навіть при оптимальному налаштуванні MaxRequestWorkers, вам, ймовірно, потрібно більше вогневої сили для ваших веб-сайтів або веб-додатків. Розглянемо такі варіанти:
- Використання CDN для великих завантажень файлів, зображень та сценаріїв.
- Використання послуги кешування, наприклад CloudFlare або інших.
- Повторне перетворення веб-сайту або стратегії веб-додатків для використання декількох веб-серверів, які виступають в якості однієї "веб-програми" за балансиром навантаження.
- Додавання більшої кількості оперативної пам’яті на сервер, що робить цей розрахунок заново.
- Тепер, коли налаштований сервер Apache, це налаштовано базову лінію. Вам потрібно буде перевірити це протягом 2-3 тижнів і шукати проблеми MaxRequestWorker у журналах помилок Apache. З цього ви можете прийняти рішення щодо оптимізації (див. Крок 10). Ви також можете встановити Munin з apt на Ubuntu і подивитися на ефективність Apache з часом і скласти уявлення про зростання, перш ніж вирішити, що вам потрібно зробити що-небудь щодо кількості трафіку, який обробляє веб-сервер.