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

Apache аварийно завершает работу VPS - необходимо уменьшить использование памяти

У меня есть VPS, на котором запущено веб-приложение, обслуживаемое с помощью Apache, которое в среднем обрабатывает 20-50 запросов в секунду. Обычно выше этой точки (50 запросов в секунду) объем памяти, который использует Apache, слишком велик для VPS, и начинают возникать ошибки - сбой веб-страниц и VPS падает на минуту или две, прежде чем вернуться к нормальному уровню.

Я считаю, что MaxClients - лучший способ уменьшить объем оперативной памяти, которую использует Apache, и я планирую уменьшить MaxClients с 256 (значение по умолчанию) примерно до 100. Каждый процесс Apache использует ~ 15 МБ, а на сервере всего 1900 МБ оперативной памяти - сервер не делает ничего, кроме запуска Apache и нескольких crons.

Текущие настройки:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

Я попытался уменьшить количество MaxClients, прежде чем это привело к огромной медлительности, поэтому мне нужны и другие варианты.

Кажется ли разумным мое предложение уменьшить MaxClients до ~ 100? Какие у меня есть варианты, если сервер снова станет тормозить - оптимизировать приложение? Какой лучший способ уменьшить использование памяти - переместить изображения на другой веб-сервер?

Любые предложения с благодарностью получены!

Лучший способ уменьшить использование памяти apache - отказаться от mod_php и перейти к чему-то вроде fastcgi. Каждый из ваших процессов apache занимает 15 МБ или более из-за накладных расходов mod_php (скорее всего). Передача запросов php на fastcgi уменьшит средний размер процесса apache примерно до 1 МБ или около того, в зависимости от конфигурации apache.

Поскольку php теперь централизован с использованием fastcgi, использование памяти стало более эффективным, и общий объем памяти, используемый системой, должен немного уменьшиться.

Другой подход заключался бы в том, чтобы разместить перед apache http-сервер с более эффективным использованием памяти и напрямую использовать статический контент для прокси-сервера нестатических запросов к apache. Nginx отлично подойдет для этого.

В качестве временного исправления вы также можете рассмотреть возможность уменьшения MaxRequestsPerChild до 1000 или чего-то более агрессивного. Поскольку процессы apache имеют тенденцию увеличиваться в размере по мере обслуживания запросов, это ограничивает их размер, убивая их и порождая новые.