Настройка Apache с очень высокой нагрузкой на сервер LAMP
У меня есть сервер LAMP, который может обслуживать ~400 запросов в секунду, конфигурация сервера:
CPU: Intel Quad Core Xeon X3430 (4 x 2.40 GHz, 8MB Cache)
RAM: 16 GB REG ECC DDR3
HD: 500 GB Enterprise Grade SATA II
OS: CentOS 64 Bit (Latest Stable)
Конфигурация Apache2 prefork:
StartServers 128
MinSpareServers 16
MaxSpareServers 64
ServerLimit 1500
MaxClients 1500
MaxRequestsPerChild 10000
В пиковые периоды нагрузка на сервер очень высока, загрузка процессора составляет около 90%, а средняя загрузка - около 130
Я не уверен, что это ограничение аппаратного обеспечения сервера или в моей конфигурации prefork что-то не так - В чем может быть проблема?
3 ответа
Вы разрешаете Apache порождать до 1500 детей для обслуживания запросов (ServerLimit
/ MaxClients
) - Неудивительно, что нагрузка на ваш сервер (количество процессов, ожидающих в очереди выполнения) становится огромной!
Моими первыми предложениями при 400 запросах в секунду с числами, которые вы цитируете в своем вопросе, было бы "Переместить сервер MySQL в свою собственную коробку" или, возможно, лучший выбор: "Добавить другой веб-сервер и сбалансировать нагрузку для ваших запросов".
Чтобы выяснить, как определить размер дополнительного сервера, следуйте совету, который HDDP500 дал в своем ответе, чтобы определить средний размер процесса Apache. Выясните, сколько процессов Apache вы хотите запустить на новом сервере, и определите, сколько оперативной памяти вам потребуется для их обработки. Не забудьте добавить запас прочности (концерт или два).
Выяснить требования к процессору (скорость / количество ядер) немного сложнее - вам нужно будет принять во внимание, сколько "работы" сервер должен выполнить для создания каждой страницы. Такой инструмент, как XDebug, может помочь вам в этом, сообщив вам, сколько времени требуется для создания страницы (вы должны выполнить этот тест как на незагруженном сервере, так и на одном под нагрузкой, но вы также не должны использовать такой инструмент, как XDebug, на производстве. сервер в большинстве случаев.)
Каков средний размер ваших процессов httpd?
Запустите эту команду, когда сервер находится под нагрузкой:
ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
Это скажет вам приблизительно средний размер процесса Apache.
Ваши MaxClients, вероятно, слишком высоки.
Посмотрите на прерывания вашего процессора и посмотрите, где начинается узкое место (через top
); как уже упоминалось ранее, было бы неплохо набрать ServerLimit
/MaxClients
,
В зависимости от вашего потребления, это может (должно) ускорить процесс, так как вы уменьшаете способность устройства не использовать процессор.