MaxClients в апачі. Як дізнатися розмір мого процесу?


9

З http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Найбільшою проблемою, що впливає на продуктивність веб-сервера, є оперативна пам'ять. Веб-сервер ніколи не повинен міняти місцями, оскільки заміна збільшує затримку кожного запиту за межею, яку користувачі вважають "досить швидкою". Це призводить до зупинки та перезавантаження користувачів, що збільшує навантаження. Ви можете і потрібно контролювати налаштування MaxClients, щоб ваш сервер не породив стільки дітей, що він починає мінятися. Ця процедура для цього проста: визначте розмір вашого середнього процесу Apache, переглянувши свій список процесів за допомогою такого інструменту, як top, і розділіть це на вашу загальну доступну пам’ять, залишивши трохи місця для інших процесів.

Основне питання полягає в тому, що я не можу зрозуміти, як дізнатися розмір, тому що, ну, я маю розмір httpd не більше 3888

Але, якщо нам потрібно визначити число для MaxClients, а у мене є 4 Гб оперативної пам’яті, тож я отримую: 972, тож я повинен використовувати як 900 в MaxClients?


4
"У мене розмір httpd не більше 3888" - я думаю, я говорю за всіх, коли я кажу: "HUH?"
живіт

Відповіді:


9

Спочатку визначте PID одного з ваших процесів Apache.

Тоді ви можете зробити щось подібне:

cat /proc/PIDHERE/status | grep VmRSS

Це дасть (поточний) розмір резидента для цього конкретного процесу, подібний до:

VmRSS: 304456 kB

Це значення як звучить, це розмір процесу, що знаходиться в оперативній пам'яті.

Потім нормалізуйте свою одиницю виміру ( 4GB * 1024 * 1024 = 4,194,304 KB). Розділити:

4194304 KB / 304456 KB = 13.77 processes

Вважайте, що у вас, ймовірно, працюють інші процеси у вашій системі, які також будуть споживати пам'ять, і в ідеалі ви хочете мінімізувати заміну, тому ви, швидше за все, не хочете налаштувати 13 Apache MaxClients (використовуючи мої номери), ви хочете трохи менше (на ваш розсуд ).

Це сира оцінка; розмір ваших процесів Apache може зростати з часом залежно від навантаження.


1
У той час як RSS не включає спільних сторінок, він включає сторінки, позначені як копіювання під час запису - тобто на машині є місце для більшої кількості процесів, ніж (сума rss) / (фізична пам'ять). Дивіться також мою відповідь в іншому місці - вільний простір є важливим для хорошої роботи.
symcbean

4

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

Якщо припустимо, що у вашому апачі працює попередня вилка ....

Налаштуйте роботу cron для підрахунку кількості процесів httpd та виходу "free". Зауважте, що якщо ваш веб-сервер обслуговує будь-який вміст із локальних файлів (а у багатьох випадках, навіть коли його немає), об'єм пам'яті, доступної для кешу / буферів, матиме великий вплив на продуктивність. тобто якщо ви дістаєтесь до точки заміни, ваша веб-продуктивність, ймовірно, жахлива!

Отримавши деякі дані, побудуйте їх на діаграмі та зробіть на ньому найменший квадрат регресії - екстраполюйте, щоб знайти кількість клієнтів, на яких ви досягнете цільового ліміту для використання пам'яті httpd. Початковою точкою для цілі пам'яті буде менше 80% фізичної пам'яті / 80% розміру вмісту.

(зауважте, якщо у вас MinSpareServers встановлено дуже високе значення, результати можуть бути неточними)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

В ідеальному світі ви також можете виміряти час відповіді URL-адреси в одному файлі журналу, але це стає набагато складніше.


Для мене буфери / кеш дуже мало змінюються, незалежно від того, працює 11 клієнтів або коли сервер досяг 86 або 151 клієнта (і сервер зазнав аварії). Що ви очікуєте побачити у своїй змінній MEM? Я отримую два числа, тож цікаво, чи дає Ubuntu 12.04 щось інше, ніж ви очікували.
PeterB

Спробуйте запустити "безкоштовно", і ви побачите, що я очікую (2 номери). Якщо це правда, що в цих номерах мало різниць при різній кількості процесів, то або ви запускаєте сервер на основі подій, або ваш параметр maxspareservers нерозумно. Якби ви опублікували зразок виводу та відповідні частини вашого httpd.conf, то, можливо, ми мали б кращу картину?
symcbean

.... і "крах"? Який збій?
symcbean

Вибачте, перегляньте pastebin.com/aHZCagVn про параметри httpd.conf та вибірки виводу. Під «крахом» я маю на увазі занадто багато клієнтів, у сервера не вистачає пам’яті та блокується. Будь ласка, див. Pastebin.com/fnXzBfQL для отримання додаткової інформації.
PeterB

1
@PeterB, здається, більш ймовірно, що MySQLd викликає цю проблему. Коли вбивця OOM ядра вбиває найгірших злочинців спочатку на основі значення / proc / PID / oom_score_adj. Як свідчить у ваших результатах, mysqld пішов першим. Можливо, вам доведеться відрегулювати налаштування в my.cnf більш відповідним чином, щоб відповідати обмеженням вашої віртуальної машини. Як / тимчасове / вирішення, просто щоб побачити, чи можна уникнути ударів вбивці OOM, спробуйте додати swapfile для додаткової віртуальної пам'яті; то позбудьтесь цього, як тільки ви виявите свою справжню проблему.
loopforever
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.