Оптимізація використання пам'яті Apache


11

Apache використовує занадто багато пам’яті мого сервера, що спричиняє збій. У мене на сервері є 4 Гб оперативної пам’яті.

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

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

Мій верхній читає, як:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

Отже, було б

MaxClients = 3000/ (322-37) = 10

Це так? Також якими мають бути значення для інших параметрів, таких як MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?

Хтось, будь ласка, допоможе мені?

Оновлення

Я спробував те, що ви запропонували. Це працює, але просто на деякий час. Через деякий час після запуску сервера використання пам'яті постійно збільшується і ніколи не зменшується.

Я маю на увазі, після запуску сервера, припустимо, що в мережі є 500 користувачів. Сервер буде споживати X ОЗУ. Через 2 години після того, як ті самі 500 користувачів в Інтернеті, сервер буде споживати 10-кратну пам'ять.

Чи є спосіб цього уникнути або мені доведеться продовжувати перегляд сервера та час від часу його перезавантажувати?


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

Відповіді:


14

Основним параметром для налаштування використання пам'яті 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) або облогу, щоб отримати кількісне число можливостей вашого сервера. Покладатися на солей на відчуття або гірше, бачити, виходить з ладу чи ні, не є гарним методом налаштування параметрів веб-сервера.

MaxClients було перейменовано на MaxRequestWorkers, починаючи з Apache 2.4.
jastram
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.