Настройка 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,

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

Другие вопросы по тегам