Ограничить использование памяти Apache 2

9

Я работаю на хобби веб-сервере с древней Blue & White G3 / 300 под управлением Debian PPC Squeeze 2.6.30. После перезапуска производительность в течение некоторого времени нормальная, но со временем она становится все более и более застрявшей. Сейчас он работает без перерыва на 76 дней, и основной причиной этого является использование памяти более чем 10 процессами apache2.

Я думаю, что мне нужно уменьшить значения для StartServers, MinSpareServersи / или MaxSpareServers, но я не уверен, какой из них настроить, и есть три раздела для каждого в зависимости от того, какой модуль mpm используется.

Как мне узнать, какой из следующих разделов мне нужно изменить, и какие разумные значения имеют, учитывая, что на коробке имеется 448 МБ физической памяти (странная история обновления по одной на 64, 128 и 256 флешек)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

В моем apache2.conf нет других экземпляров StartServers, но ни один из этих модулей mpm не появляется в mods-availableили mods-enabled. Идеи?

Спасибо!

UltraNurd
источник
Я исходил из того, что на вашем компьютере недостаточно памяти (а ваша паршивая производительность связана с интенсивной перестановкой). Если вы не
поменялись

Ответы:

6

400 МБ не так много для веб-сервера в наши дни - вы можете подумать о замене коробки :)

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

Если это утечка памяти, то реальное решение для этого - найти и исправить утечку памяти, но, поскольку это, как правило, боль в заднице, вы также можете настроить MaxRequestsPerChildчто-то другое, кроме 0 (неограниченно). Это убьет работников Apache, когда они будут обслуживать фиксированное количество запросов (что заставит их отказаться от утечки памяти в процессе.

Начните с больших значений (в тысячах или около того) и переходите к сотням. Если вы получаете менее 100 запросов на ребенка, утечка памяти достаточно велика, чтобы гарантировать ее фактическое исправление, так как снижение производительности от постоянного уничтожения и повторного появления работников Apache будет значительным.


Re: какой MPM настроить, ответ почти наверняка prefork.
Вы можете бежать httpd -Vи искать Server MPM:линию, которая скажет вам наверняка.

voretaq7
источник
1
-V дал мне необходимую информацию о форфорке (хотя в моем случае это apache2 -V). Спасибо!
UltraNurd
Кажется, сделали свое дело. Я думаю, что проблема заключалась в том, что у меня не хватало физической памяти и менялся местами, потому что слишком много дочерних серверов были запущены (каждый захватил около 80 МБ). И да, я знаю, сервер старый. Но он едва обрабатывает любые запросы: oD.
UltraNurd
1
Если вы не обрабатываете много запросов, вы также можете сократить количество серверов Start & Spare, как вы упомянули в своем первоначальном посте (в системах разработки я установил для них все значения между 2 и 5, чтобы уменьшить использование ОЗУ)
voretaq7
В итоге я сбросил минимальные и максимальные запасные части до 3 и 6 с 5 и 10, и, похоже, осталось достаточно ОЗУ, чтобы помешать обмену. Спасибо!
UltraNurd
1

Чтобы ограничить использование памяти процессом apache, вам нужно настроить MaxClients.

Общее правило: (Макс. Требуемая память) / (Использование памяти на 1 процесс Apache) = # Макс. Клиентов

В конце вам также нужно настроить MaxSpareServers <= Max Clients .

Использование памяти одним процессом сильно зависит от загруженных вами модулей (php и т. Д.), Поэтому вы можете установить максимальное количество клиентов немного ниже.


источник