Оптимальні значення для директив ServerLimit, MaxClients, MaxRequestsPerChild


29

Я запускаю на веб-сайті інтенсивний трафік з великою кількістю динамічного контенту, в основному створеного користувачем.

Сервер є виділеним сервером та має усього 4 процесора Intel (R) Xeon (R) X3210 @ 2.13 ГГц. Мені потрібно знати оптимальні значення для директив апарату ServerLimit та MaxClients, враховуючи, що сервер має 4 Гб оперативної пам’яті, а база даних MySQL працює на окремому сервері. Панель DirectAdmin із CentOS.

Нижче наведені мої нинішні директиви, але під час годин пік із більш ніж 5-тисячою кількістю користувачів помічено важливе відставання - і це не вся помилка MySQL, оскільки сторінки, здається, генеруються швидко (я реалізував лічильник часу генерації сторінок), але є довгий затримка з'єднання, поки сторінка не почне реагувати і не надсилається до браузера.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Слід зазначити, що моніторинг сервера за допомогою верхньої команди, використання процесора ніколи не перевищує 20% ~ 30% у піковий час. На той час сервер MySQL також використовує 30 ~ 50%, і я постійно працюю над виправленням повільних запитів, але це вже інше питання. Я знаю, що це не вузьке місце БД, оскільки статичні сторінки також потребують тривалого завантаження у години пік.

Будь-які вдячні поради щодо оптимізації цих значень будуть дуже вдячні, дякую.

Відповіді:


24

Ваші MaxClients - ЗАВДАННЯ ШЛЯХУВАННЯ! Який розмір поточного процесу вашої апаші? Помножте, що х 900. Це більше, ніж 4 Гб? Якщо так, то машина, ймовірно, перейде в заміну. Я зазвичай починаю з MaxClients = 2x vCPU у вікні (grep -c процесор / proc / cpuinfo). Що в цьому випадку буде приблизно 8. Потім переконайтеся, що розмір процесу MaxClients x apache не перевищує 4 Гб.

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

Потім встановіть для своїх серверів Min, Max та Start за MaxClients. Немає реальної необхідності, щоб вони відрізнялися у виділеному серверному середовищі.

Тоді зробіть тестування з ab (як зазначає гусь.)


Чомусь здається, що я неправильно визначив розмір процесу ... тепер у верхній команді я бачу, що апаші процеси RESIDENT SIZE складають від 10 до 15 МБ. Я десь читав, що оскільки спільні бібліотеки включені до цього числа, "реальний" розмір наполовину менший. Враховуючи це, я повинен підрахувати, що я можу вмістити 570 процесів розміром 7 Мб кожен, чи вважаєте ви це правильним?
andreszs

Я пропоную використати 15 Мб для обчислень, а потім почати перевіряти показники: # http процес проти використання пам'яті. Це дасть вам кращу думку про кількість MaxClients
hdanniel

1
Я знизив його до 400 і навіть до години піку результат мав протилежний ефект, ніж бажаний: Будь-яке значення, нижче за оригінальне, створює тайм-аути та великі затримки. Насправді зараз я збільшив її до 1500 клієнтів, а тепер обсяг пам’яті становить 3 ГБ, тоді як середнє використання процесора становить 8%. Звичайно, зараз на SQL-сервері є більше навантаження, і мені доведеться над цим працювати.
andreszs

Ось моя команда htop зараз, 1500 апаратних процесів і майже 100 системних процесів. Це з 75% використання оперативної пам’яті. a.imagehost.org/0011/htop.png Чи варто переглянути свою формулу? ;)
andreszs

1
Ось чому вам потрібно зробити тестування у власному середовищі. Перед нашими апашами у нас є http-прискорювачі, тому вони не годують мобільних користувачів. Ваша заявка також видається дуже легкою. Якщо ви перемістили навантаження у вашу БД, це говорить мені, що більшість цих процесів apache насправді обслуговують дані проти сидячого та очікування з'єднання mysql. Що змушує мене запитати, скільки підключень ви дозволяєте до вашої БД? Чи перевищує це число ваші MaxClients? У вас 5000 одночасних з'єднань? Якщо так, то, можливо, ви захочете заглянути в щось на кшталт перлбалу спереду.
toppledwagon

5

Потрібно отримати середній розмір вашого апаш-процесу. За допомогою цього числа та загального розміру оперативної пам’яті ви можете розрахувати директиву MaxClients. Пам'ятайте це: "Веб-сервер ніколи не повинен міняти місцями" ( Настроювання продуктивності Apache )

Моніторинг зверху чи htop - це нормально, але вам потрібен кращий перегляд всіх статистичних даних ваших серверів (процесор, оперативної пам’яті, дискового вводу / виводу, запитів apache, повільних запитів mysql тощо) за допомогою певного інструмента моніторингу, наприклад, ganglia або munin для знайти можливі вузькі місця.


На даний момент у мене є лише верхня та команда htop, і я ніяк не можу зрозуміти всю її інформацію. Це активність вчора в годину піку, здається, немає жодної заміни; скажіть, будь ласка, якщо я помиляюся: Завдання: 1043 всього, 2 біг, 1041 сон, 0 зупинено, 0 зомбі Cpu (s): 13,8% нас, 1,8% sy, 0,0% ni, 82,1% id, 0,8% wa, 0,0% привіт, 1,5% si, 0,0% st Mem: 4138360k всього, 3961276k використано, 177084k безкоштовно, 75016k буфери Обмін: 2031608k всього, 1484k використано, 2030124k безкоштовно, 1836600k кешовано
andreszs

Так, ваш сервер не змінюється. Я віддаю перевагу показникам у реальному житті, але якщо ви хочете, ви можете скористатися інструментом напруження, таким як ab або httperf, щоб перевірити, наскільки може працювати ваш сервер. Для тестів подбайте про MaxClients і почніть з низької кількості (виходячи з припущення 15MB).
hdanniel

4

Я рекомендую пограти з інструментом бенчмарка (ab) від апача. Ви можете пограти зі значеннями, щоб їх відповідати вашому потоку трафіку і побачити, який тип відповідей ви отримуєте на середній час завантаження тощо. У цей момент ви можете пограти з налаштуваннями, про які ви говорите, щоб спробувати їх оптимізувати. Ви повинні мати можливість отримати ab, щоб отримати ручку щодо оптимістичної продуктивності для кожного перегляду виступу.

Мені не дуже доцільно говорити про ваші налаштування, однак вам також потрібно врахувати свою оперативну пам’ять, оскільки це здається, що ви їсте багато оперативної пам’яті з цими налаштуваннями. Хоча це лише спекуляція без будь-яких даних. htop дозволяє вам добре візуально прочитати ваші ресурси.

Також ваше середнє навантаження може сказати багато. Я сумніваюся, що ваше використання набагато перевищує вашу загальну кількість ядер на 20-30% процесорних процесів, але це ще один показник того, наскільки наполегливо працює ваш сервер.


Проблема в тому, що я недостатньо досвідчений в адмініструванні сервера, тому починайте грати з налаштуваннями та стежити за результатами. Я ніколи не використовував інструмент ab, щоб бути чесним. Також зміна значень вимагає перезапустити HTTDP, що спричиняє незручності для моїх користувачів, тому я вважаю за краще цього уникати. Уявіть, що ви надсилаєте повідомлення іншому користувачеві, і після натискання кнопки "Надіслати" ви отримуєте проблему з підключенням до сервера. Про використання процесора дивіться інформацію з мого попереднього коментаря: він не повинен перевищувати 15% у піковий час. Я думаю, що це цілком прийнятно, враховуючи, що вчора у мене було 6000 користувачів в Інтернеті.
andreszs

Ну я точно не хотів би, щоб ви це робили у виробничих умовах. Я рекомендую робити це в найменший час трафіку, якщо інший сервер (з дуже схожим, якщо не однаковим обладнанням) тестувати. ab досить простий у використанні, але я точно вважаю, що toppledwagon дав хорошу інструкцію щодо розрахунку ваших MaxClients. Як тільки ви перестанете використовувати простір для заміни, ви побачите певне поліпшення. перевірити httpd.apache.org/docs/2.0/programs/ab.html та cyberciti.biz/tips/… для AB
гусак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.