Назад | Перейти на главную страницу

Достигнуто зависание Apache с MaxClients

Мой Apache 2.2 (преформа MPM) зависает при достижении MaxClients, а не ставит запросы в очередь и не обслуживает их, когда дочерние процессы становятся свободными. Когда это происходит, веб-сервер полностью не отвечает, пока он не будет перезапущен вручную.

Стек сервера - это Ubuntu 8, MySQL 5, PHP 5. Оборудование - Dual Xeon (2.8) с 2 ГБ оперативной памяти. Он обслуживает 30 000–50 000 просмотров страниц в день. Статические изображения, CSS и JS выгружаются на отдельный сервер, а PHP кэшируется с помощью eAccelerator. Вывод HTML многих страниц кэшируется в файловой системе.

Соответствующие директивы Apache:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   2000

Кажется, что ваш сервер меняет местами. Предполагая, что для процессов apache используется 16 МБ, 150 x 16 МБ = 2400 МБ, за пределами возможностей вашего сервера (2 ГБ)

Проверьте память, используемую Apache, я думаю, вам нужно будет уменьшить значение MaxClients.

Вы можете найти больше информации об этом в Раздел "Проблемы с оборудованием и ОС" из Apache Performance Tuning

Какая у вас установлена ​​переменная Timeout?

Вы можете нажать на него, если еще не установили:

Timeout 30

Как сказал HD, вы можете захотеть сбросить свои MaxClients или увеличить оперативную память, чтобы убедиться, что он не попадает в своп.

Вычислите MaxClients и установите значение на его основе, а не значение по умолчанию.

Расчет Max-Client

сначала вычислите средний объем памяти для детей apache, когда трафик высок.

Разделите это на память, которую вы хотите выделить для Apache.

в вашем случае, если вы хотите предоставить 1 ГБ оперативной памяти для веб-сервера, а среднее использование памяти процесса составляет 16 МБ, тогда 1000 МБ / 16 = 62

это значение max_client, которое вы должны указать.

Также убедитесь, что вы настраиваете prefork, а не worker

если я не ошибаюсь, это переменные для prefork-

MinSpareServers

MaxSpareServers      

MaxClients          

MaxRequestsPerChild   

так как вы запускаете mysql и apache на одной машине. Вам нужно добавить больше ОЗУ, иначе память исчерпается и начнется подкачка, что еще больше замедлится.