Имеется apache 2.0.48 на solaris 9
Периодически имею отъедание всей памяти апачем.
Вот что видно через несколько минут после старта:#top -U nobody
48 processes: 47 sleeping, 1 on cpu
CPU states: % idle, % user, % kernel, % iowait, % swap
Memory: 512M real, 234M free, 270M swap in use, 2128M swap freePID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND
1269 nobody 1 59 0 15M 3192K sleep 0:00 0.03% httpd
1261 nobody 1 59 0 15M 3192K sleep 0:00 0.02% httpd
1268 nobody 1 59 0 15M 3192K sleep 0:00 0.02% httpd
1266 nobody 1 59 0 15M 3192K sleep 0:00 0.02% httpd
1260 nobody 1 59 0 15M 3192K sleep 0:00 0.01% httpd
1259 nobody 1 59 0 15M 3192K sleep 0:00 0.01% httpd
29912 nobody 1 59 0 137M 123M sleep 0:36 0.00% httpd
1208 nobody 1 59 0 15M 5432K sleep 0:00 0.00% httpd(обратите внимание на процесс 29912!)
Ну а после пол дня работы в колонке SIZE везде стоит 130-140 метров. И естественно, система уже еле шевелится, т.к. весь своп занят :(
Причём те процессы, которые столько "жрут", активными не являются (проверял по lsof).Вначале была мысль, что кто-то хакает нас, но в логах ничего подозрительного нет (а может плохо смотрел?). Единственно, остались подозрения на разных роботов и поисковиков: очень много "отъедания" происходит после соединений от ljxxxxxx.inktomisearch.com
Уже в конфиг вставил:
<IfModule prefork.c>
...
MaxMemFree 10240
</IfModule>
Но не помогло.Гуру, что посоветуете сделать?
ограничить ресурсы для apache в limits.conf
ограничить php скрипты в php.ini
ограгичить cgi скрипты Rlimit*
периодически обновлять процессы апача MaxRequestsPerChild
>ограничить ресурсы для apache в limits.conf
У меня, как я написал, солярка - там нет такого файла (хотя есть /etc/system). Но вряд ли это поможет - система не ограничивает апач ни в чём - он сам отъедает всю память.
Да если и ограничить ему использование памяти - будет он постоянно ругаться о нехватке ресурсов и точно так же не работать!>ограничить php скрипты в php.ini
>ограгичить cgi скрипты Rlimit*
Что именно надо сделать?>периодически обновлять процессы апача MaxRequestsPerChild
Что значит "периодически обновлять"?
>>ограничить php скрипты в php.ini
>>ограгичить cgi скрипты Rlimit*
>Что именно надо сделать?
найти файл php.ini и настроить в нем переменные
max_execution_time
memory_limitВ конфиге апача прописать опции Rlimit*, предварительно прочитав о них на сайте апача
>
>>периодически обновлять процессы апача MaxRequestsPerChild
>Что значит "периодически обновлять"?
Каждый процесс апача обрабатывает определенное кол-во запросов, после чего убивается и вместо него порождается новый. Помогает, если какой то процесс не освобождает память - то через некоторое время он все равно завершиться