Я использую сайт с интенсивным трафиком и большим количеством динамического контента, в основном созданного пользователями.
Сервер является выделенным и имеет в общей сложности 4 процессора Intel (R) Xeon (R) CPU 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%, и я постоянно работаю над исправлением медленных запросов, но это уже другая проблема. Я знаю, что это не узкое место в БД, потому что статические страницы также долго загружаются в часы пик.
Будем очень признательны за любые советы по оптимизации этих значений, спасибо.
Ваш MaxClients ПУТЬ слишком высок. Каков текущий размер вашего процесса apache? Умножьте это на 900. Это больше 4 ГБ? Если это так, скорее всего, машина будет заменена. Обычно я начинаю с MaxClients = 2x vCPU в коробке (grep -c processor / proc / cpuinfo). В данном случае это будет около 8. Затем убедитесь, что размер процесса MaxClients x apache не превышает 4 ГБ.
Оттуда вы можете настроить MaxClients, в зависимости от типа подключения ваших клиентов. (Пользователей удаленного доступа нужно кормить с ложечки и т. Д.) Но убедитесь, что вы никогда не попадете в ситуацию подмены.
Затем установите для серверов Min, Max и Start значение MaxClients. Нет никакой реальной необходимости в том, чтобы они отличались в среде выделенного сервера.
Затем проведите небольшое тестирование с помощью ab (как гусиные заметки).
Вам нужно получить средний размер вашего процесса apache. С этим числом и общим размером вашей оперативной памяти вы можете рассчитать директиву MaxClients. Помните: «Веб-сервер никогда не должен менять местами» (Настройка производительности Apache)
Мониторинг с помощью top или htop - это нормально, но вам нужно лучше просматривать всю статистику ваших серверов (процессор, оперативная память, дисковый ввод-вывод, запросы apache, медленные запросы mysql и т. Д.) С помощью некоторых инструментов мониторинга, таких как ganglia или munin to найти возможные узкие места.
Я рекомендую поиграть с инструментом тестирования apache (ab). Вы можете поэкспериментировать со значениями, чтобы сопоставить их с потоком вашего трафика, и посмотреть, какие типы ответов вы получаете, включая среднее время загрузки и т.п. На этом этапе вы можете поэкспериментировать с настройками, о которых говорите, чтобы попытаться оптимизировать их. С помощью ab вы должны уметь определять оптимальную производительность для каждой настройки производительности.
С моей стороны было бы неразумно говорить о ваших настройках, однако вам также необходимо учитывать свою оперативную память, потому что похоже, что вы съедаете много оперативной памяти с этими настройками. Хотя это просто домыслы без каких-либо данных. htop дает вам хорошее визуальное представление о ваших ресурсах.
Также ваша средняя нагрузка может многое сказать. Я сомневаюсь, что ваше использование намного выше, чем общее количество ядер от 20-30% процессора, но это еще один показатель того, насколько сильно ваш сервер действительно работает.