Мой 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 на одной машине. Вам нужно добавить больше ОЗУ, иначе память исчерпается и начнется подкачка, что еще больше замедлится.