Приветствую!В 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М...) - я постоянно вижу эти цифры. Если Апач длительное время не используется эти показатели должны уменьшаться? (т.е. освобождение памяти происходит по идее?)
> Если Апач длительное время не используется эти показатели должны уменьшаться?Читайте секцию 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. Их вы и видите. Если смущает расход ОЗУ - поставьте лимит жизней для форка.
>> Если Апач длительное время не используется эти показатели должны уменьшаться?
> Читайте секцию mpm_prefork_module из экстра-конфига httpd-mpm.confСпасибо, потестирую
> Почему Апач не освобождает память из под процессовПотому что апач не умеет этого делать. Он умеет прибить сервер вообще, и запустить новый.
> память занимаемая процессами постоянно увеличивается, хотя сервер используется редко.
Это происходит потому, что экземпляр сервера используется несколько раз несколькими запросами. По дефолтному конфигу - вообще неограниченное количество раз. При этом, если в модулях есть утечки памяти, они будут накапливаться от вызова к вызову, а сбрасываться только при полном рестарте апача.
Чтобы освобождать использованную память, нужно прибивать сервера. Поставьте им MaxRequestsPerChild = 10, и после 10 запросов сервер сдохнет и будет запущен новый с чистой (и малой) памятью.
Если нагрузка на сервер невелика, уменьшите мин-макс. Поставьте оба значения =2. При этом ровно два сервера будут всегда наготове. И ни один сервер не будет обслуживать больше 10 запросов.
> Если вдруг количество запросов начнет уменьшаться, апач начнет прибивать лишние сервераВот на счет этого момента я и спрашивал. Ситуация такая, что захожу, скажем в 10.00 - пишет процес занимает 10Мб, загружаю страничку где-то через час, проверяю - процес занимает уже 13 Мб.
Такое впечатления, что процес за час неактивнос не освободил память.
>поставьте лимит жизней для форкаИмеете в виду MaxRequestsPerChil ?
Спасибо, очень внятно и информативно!