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

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

3 ответа

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

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

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

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

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

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

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

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