it-swarm.xyz

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

У меня на сайте интенсивный трафик, много динамического контента, в основном пользовательского.

Сервер является выделенным и имеет в общей сложности 4 процессора Intel Xeon® X3210 с тактовой частотой 2,13 ГГц. Мне нужно знать оптимальные значения для директив ServerLimit и MaxClients Apache, учитывая, что сервер имеет 4 ГБ RAM и база данных 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

Следует отметить, что при мониторинге сервера с помощью команды top загрузка ЦП никогда не превышает 20-30% в час пик. Сервер MySQL в то время также использовался на 30-50%, и я постоянно работаю над исправлением медленных запросов, но это другая проблема. Я знаю, что это не узкое место БД, потому что статические страницы также загружаются в часы пик.

Любые советы по оптимизации этих значений будут с благодарностью, спасибо.

29
andreszs

Ваши MaxClients WAY WAY WAY слишком высоки. Каков текущий размер вашего процесса Apache? Умножьте это на 900. Это больше, чем 4 ГБ? Если это так, машина, вероятно, собирается в обмен. Я обычно начинаю с MaxClients = 2x vCPU в коробке (grep -c процессор/proc/cpuinfo). Которая в этом случае будет около 8. Затем убедитесь, что размер процесса MaxClients x Apache не превышает 4 ГБ.

Вы можете настроить MaxClients оттуда в зависимости от типа соединения, которое имеют ваши клиенты. (Пользователи коммутируемого доступа должны быть обмануты и т.д.) Но убедитесь, что вы никогда не попадете в ситуацию обмена.

Затем установите для серверов Min, Max и Start значение MaxClients. Нет необходимости в том, чтобы они отличались в среде выделенного сервера.

Затем проведите некоторое тестирование с помощью ab (как заметки гусей).

24
toppledwagon

Вам необходимо получить средний размер вашего процесса Apache. С этим числом и общим размером вашей RAM вы можете вычислить директиву MaxClients. Помните: "Веб-серверу никогда не придется менять местами" ( Настройка производительности Apache )

Мониторинг с помощью top или htop - это нормально, но вам нужно лучше просматривать всю статистику ваших серверов (процессор, ram, дисковый ввод-вывод, запросы Apache, медленные запросы mysql и т.д.) С помощью некоторого инструмента мониторинга, такого как ganglia или munin, чтобы найти возможные узкие места.

5
hdanniel

Я рекомендую поиграть с Apache's benchmark (ab). Вы можете поиграться со значениями, чтобы сопоставить их с вашим трафиком и посмотреть, какие ответы вы получаете, а также среднее время загрузки и тому подобное. В этот момент вы можете поиграть с настройками, о которых вы говорите, чтобы попытаться оптимизировать их. С помощью ab вы сможете получить представление об оптимальной производительности для каждого твика производительности.

Мне было бы не очень разумно говорить о ваших настройках, однако вам также необходимо принять во внимание ваше RAM, потому что звучит так, как будто вы съели много RAM с этими настройками. Хотя это просто домыслы без каких-либо данных. htop дает вам хорошее визуальное чтение ваших ресурсов.

Также ваша средняя нагрузка может многое сказать. Я сомневаюсь, что ваше использование намного превышает общее количество ядер на 20–30%, но это еще один показатель того, насколько интенсивно работает ваш сервер.

4
goose