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

29

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

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

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

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

andreszs
источник

Ответы:

24

Ваши 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 (как гусиные заметки).

toppledwagon
источник
По какой-то причине кажется, что я неправильно определил размер процесса ... теперь я вижу в верхней команде, что процессы RESIDENT SIZE apache находятся в диапазоне от 10 до 15 МБ. Я где-то читал, что, поскольку общие библиотеки включены в это число, «реальный» размер составляет половину этого размера. Учитывая это, я должен рассчитать, что смогу разместить 570 процессов размером 7 МБ каждый, как вы думаете, это правильно?
andreszs
Я предлагаю вам использовать 15 МБ для расчетов, а затем начать проверять показатели: # http процесс против использования памяти. Это даст вам лучшее представление о количестве MaxClients
hdanniel
1
Я снизил его до 400, и даже до часа пик результат имел эффект, противоположный желаемому: любое значение ниже исходного создает таймауты и длительные задержки. Фактически, теперь я увеличил его до 1500 клиентов, а использование памяти теперь составляет 3 ГБ, а средняя загрузка ЦП составляет 8%. Конечно, теперь нагрузка на SQL-сервер больше, и мне придется работать над этим.
andreszs
Вот моя команда htop, 1500 apache-процессов и почти 100 системных процессов. Это при 75% использования ОЗУ. a.imagehost.org/0011/htop.png Стоит ли пересмотреть формулу? ;)
andreszs
1
Вот почему вам нужно проводить тестирование в вашей собственной среде. Перед нашими апачами у нас есть http-ускорители, поэтому они не кормят мобильных пользователей ложкой. Ваше приложение также выглядит очень легким. Если вы переместили нагрузку на вашу БД, это говорит мне о том, что большинство из этих процессов apache на самом деле обслуживают данные, вместо того, чтобы сидеть и ждать подключения mysql. Который затем заставляет меня спросить, сколько соединений вы разрешаете к вашей БД? Это число превышает ваши MaxClients? У вас есть 5000 одновременных подключений? Если это так, вы можете посмотреть что-то вроде perlbal впереди.
toppledwagon
5

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

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

hdanniel
источник
На данный момент у меня есть только команды top и htop, и я все равно не могу понять всю их информацию. Это активность вчера в час пик, похоже, что обмена нет; Пожалуйста, скажите мне, если я не прав: Задачи: всего 1043, 2 работает, 1041 спит, 0 остановлен, 0 зомби ЦП: 13,8% нас, 1,8% Си, 0,0% НИ, 82,1% ИД, 0,8% ВА, 0.0% hi, 1.5% si, 0.0% st Mem: всего 4138360k, использовано 3961276k, свободно 177084k, буферы 75016k Своп: всего 2031608k, использовано 1484k, свободно 2030124k, кэшировано
1836600k
Да, ваш сервер не меняет местами. Я предпочитаю реальные показатели, но если вы хотите, вы можете использовать инструмент подчеркивания, например, ab или httperf, чтобы проверить, сколько может выдержать ваш сервер. Для тестов позаботьтесь о MaxClients и начните с небольшого числа (исходя из предположения 15 МБ).
hdanniel
4

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

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

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

Гусь
источник
Проблема в том, что я недостаточно опытен в администрировании серверов, поэтому начните играть с settigns и следить за результатами ... Я никогда не использовал инструмент ab, если честно. Также изменение значений требует перезапуска HTTDP, что создает неудобства для моих пользователей, поэтому я предпочитаю избегать этого. Представьте, что вы отправляете сообщение другому пользователю, и после нажатия кнопки «Отправить» у вас возникает проблема с подключением к серверу. Об использовании ЦП см. Информацию из моего предыдущего комментария: он не должен превышать 15% в час пик. Я думаю, что это вполне приемлемо, учитывая, что вчера у меня было 6000 онлайн-пользователей.
andreszs
Ну, я определенно не хотел бы, чтобы вы делали это в производственной среде. Я рекомендую делать это при минимальном трафике, если тестировать другой сервер (с очень похожим, если не идентичным оборудованием). Ab довольно прост в использовании, но я определенно думаю, что toppledwagon дал хорошую инструкцию по вычислению ваших MaxClients. Как только вы перестанете использовать пространство подкачки, вы увидите определенное улучшение. проверьте httpd.apache.org/docs/2.0/programs/ab.html и cyberciti.biz/tips/… для AB
гусь