URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7286
[ Назад ]

Исходное сообщение
"Процесы Apache"

Отправлено dmitry_sairus , 02-Июл-11 15:18 
Приветствую!

В top постоянно висят:

22241 apache    15   0 22032  10m 3416 S  0.0  4.1   0:00.05 httpd              
24491 apache    15   0 21636   9m 3312 S  0.0  3.9   0:00.01 httpd              
24492 apache    15   0 21636 9.9m 3304 S  0.0  3.8   0:00.01 httpd              
19557 root      15   0 21088 9.8m 3608 S  0.0  3.8   0:13.38 httpd              
18398 mysql     15   0 49568 9944 4284 S  0.0  3.8  12:07.11 mysqld            
24423 apache    15   0 21636 9888 3076 S  0.0  3.8   0:00.01 httpd              
24489 apache    15   0 21088 8744 2248 S  0.0  3.3   0:00.00 httpd              
9690 named     22   0 39092 3768 2108 S  0.0  1.4   0:13.19 named              


Понятное дело, что количество процессов я задаю в StartServers. Интересно, апач освобождает память из под этих процессов? (как видно с примера - 10М + 9М +9.9М...) - я постоянно вижу эти цифры. Если Апач длительное время не используется эти показатели должны уменьшаться? (т.е. освобождение памяти происходит по идее?)


Содержание

Сообщения в этом обсуждении
"Процесы Apache"
Отправлено DeadLoco , 02-Июл-11 21:52 
> Если Апач длительное время не используется эти показатели должны уменьшаться?

Читайте секцию mpm_prefork_module из экстра-конфига httpd-mpm.conf

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

Общая идея такова: сначала форкается StartServers серверов. Если их начнут использовать клиентские запросы, апач начнет превентивно форкать SpareServers - чтобы MinSpareServers висели на подхвате.
Если вдруг количество запросов начнет уменьшаться, апач начнет прибивать лишние сервера так, чтобы их было не больше MaxSpareServers. Разница между мин и макс нужна для того, чтобы оперативно отрабатывать волны посетителей.
MaxClients - количество серверов, которые вообще разрешено одновременно нафоркать апачу.
Для того, чтобы предотвратить крупную утечку памяти, можно задать MaxRequestsPerChild. После обработки этого количества запросов, сервер сдохнет, а вместо него форкнется новый, чистый, без мусора в куче.

Ваш апач работает на дефолтных значениях. После запуска он создает 5 форков, под нагрузкой форчит еще и еще, когда нагрузка спадает - лишние форки прибиваются, остается 10. Их вы и видите. Если смущает расход ОЗУ - поставьте лимит жизней для форка.  


"Процесы Apache"
Отправлено dmitry_sairus , 02-Июл-11 22:04 
>> Если Апач длительное время не используется эти показатели должны уменьшаться?
> Читайте секцию mpm_prefork_module из экстра-конфига httpd-mpm.conf

Спасибо, потестирую


"Процесы Apache"
Отправлено DeadLoco , 03-Июл-11 00:28 
> Почему Апач не освобождает память из под процессов

Потому что апач не умеет этого делать. Он умеет прибить сервер вообще, и запустить новый.

> память занимаемая процессами постоянно увеличивается, хотя сервер используется редко.

Это происходит потому, что экземпляр сервера используется несколько раз несколькими запросами. По дефолтному конфигу - вообще неограниченное количество раз. При этом, если в модулях есть утечки памяти, они будут накапливаться от вызова к вызову, а сбрасываться только при полном рестарте апача.

Чтобы освобождать использованную память, нужно прибивать сервера. Поставьте им MaxRequestsPerChild = 10, и после 10 запросов сервер сдохнет и будет запущен новый с чистой (и малой) памятью.
Если нагрузка на сервер невелика, уменьшите мин-макс. Поставьте оба значения =2. При этом ровно два сервера будут всегда наготове. И ни один сервер не будет обслуживать больше 10 запросов.



"Процесы Apache"
Отправлено dmitry_sairus , 02-Июл-11 22:16 

> Если вдруг количество запросов начнет уменьшаться, апач начнет прибивать лишние сервера

Вот на счет этого момента я и спрашивал. Ситуация такая, что захожу, скажем в 10.00 - пишет процес занимает 10Мб, загружаю страничку где-то через час, проверяю - процес занимает уже 13 Мб.

Такое впечатления, что процес за час неактивнос не освободил память.


>поставьте лимит жизней для форка

Имеете в виду MaxRequestsPerChil ?



"Процесы Apache"
Отправлено dmitry_sairus , 03-Июл-11 01:33 
Спасибо, очень внятно и информативно!