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

Проблемы с eAccelerator, зависания сервера

Я недавно установил eaccelerator и переключил php на dso, все было хорошо на сервере. Нагрузка на сервер составляла около 1-2 (4 процессора), и через некоторое время сервер был перегружен (нагрузка на сервер увеличилась до 250), и сервер остановился. В режиме suphp сервер был перегружен трафиком, поэтому я решил переключить его на eaccelerator, и теперь я потерялся ... Кто-нибудь может это объяснить?

из вашего описания tat звучит как непоточный apache с (dso-) php. А у вас скачки нагрузки, да? У меня было это раньше ...

Ваш apache запускает ряд серверных процессов. Если входящих подключений больше, чем могут обработать ваши процессы, то порождается больше серверных процессов.

Поскольку нагрузка уже велика, нерест занимает некоторое время. Если порождение занимает много времени и есть больше входящих запросов до того, как новые порожденные серверные процессы станут работоспособными, порождаются дополнительные процессы, еще больше замедляя работу машины. Это ситуация, когда eaccelerator не очень помогает.

Так что ты можешь сделать? Ну вы можете установить StartServers, MinSpareServers и MaxSpareServers в вашей конфигурации apache выше, чем сейчас. Вы должны определить средний размер одного процесса apache в вашей системе (поскольку вы используете mod_php, они должны начинаться примерно одного размера, позже они начнут расти, потому что php никогда не освобождает выделенную память) и определить, сколько процессов такого размера вы может уместиться в объем памяти, который вы хотите потратить на apache. Вам необходимо предварительно запустить достаточное количество серверных процессов, чтобы оставаться в живых во время скачков нагрузки без слишком частого появления. Также не забывайте поддерживать MaxRequestsPerChild на разумном уровне, чтобы время от времени освобождать память, выделенную php.

Долгосрочным решением было бы переключиться на многопоточный (рабочий) MPM на apache, что проще для оперативной памяти, потому что потоки apache совместно используют память (и запуск нового потока намного проще в системе, чем порождение нового процесса) и использовать fcgi с php. С акселератором все в порядке, я бы оставил его в настройке.

Прекратите использовать suPHP. Он запускает отдельный процесс для каждого запроса PHP, что делает eAccelerator бесполезным (поскольку кеш удаляется с каждым запросом).

Что ж, возможно, вы слишком много требуете от своего сервера, даже если включен eAccelerator. Сколько процессов apache было активным при средней загрузке 250? Похоже, что независимо от вашей конфигурации php, вам нужно настроить параметры apache, чтобы он не мог запускать больше экземпляров, чем может обрабатывать ваше серверное оборудование.