apache2 жрут память

S
На сайте с 29.09.2009
Offline
133
3860

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

выглядит это так

top - 02:14:21 up 45 min, 1 user, load average: 0.00, 0.12, 0.09
Tasks: 89 total, 1 running, 88 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1034452k total, 518660k used, 515792k free, 9664k buffers
Swap: 0k total, 0k used, 0k free, 96936k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2094 www-data 20 0 222m 174m 5936 S 0 17.2 1:41.25 apache2
2091 www-data 20 0 222m 174m 5936 S 0 17.2 1:20.33 apache2

1191 mysql 20 0 137m 22m 5876 S 0 2.2 0:39.67 mysqld
2090 www-data 20 0 45780 13m 5232 S 0 1.3 0:00.24 apache2
2093 www-data 20 0 45380 12m 5028 S 0 1.3 0:00.30 apache2
2101 www-data 20 0 44152 11m 5236 S 0 1.2 0:00.24 apache2
2067 root 20 0 42876 11m 6108 S 0 1.1 0:00.09 apache2

Не помогло:

1. KeepAlive off

2. MaxRequestsPerChild 100

На firstvds это как-то автоматически убивается, на ВДС-ке другого хостера процессы упорно висят.

Artjom77
На сайте с 11.09.2007
Offline
75
#1

ServerLimit 20

в той же секции, где и MaxRequestsPerChild поставьте. И будет не более 20 процессов.

Проверить сайт на доступность из разных стран (http://check-host.net)
Andreyka
На сайте с 19.02.2005
Offline
822
#2

По топу видно что процессы активно работают

Значит ваши скрипты чтото делают

За что же их убивать?

Не стоит плодить сущности без необходимости
S
На сайте с 29.09.2009
Offline
133
#3
ServerLimit 20
в той же секции, где и MaxRequestsPerChild поставьте. И будет не более 20 процессов.

Проблема не в количестве процессов или вы имели в виду что-то другое.

Andreyka:
По топу видно что процессы активно работают
Значит ваши скрипты чтото делают

За что же их убивать?

Как раз не работают. На сервере запускается 1 скрипт (вручную). При каждом запуске задействован 1 процесс apache2 и некоторые другие, причём каждый раз новый. На последних секундах выполнения скрипта % используемой памяти возрастает с 4 до 17-20 и всё, в таком состоянии процесс apache2 остаётся.

При следующем запуске всё повторяется. Таким образом, в TOP появляется после 3 запусков 3 процесса apache2 (после 4-х 4-е и т.д.), каждый из которых использует 17-20 % памяти, но ни один из них не активен.

Самое интересное, что если запускать по крону тот же скрипт /usr/bin/php -q путь к скрипту, то вместо apache2 работает php и при завершении работы память высвобождается прямо во время завершения скрипта. Т.е. последняя секунда 17 % памяти использует php, следующая 0 % (процесс php килится).

PS На ВДС хостинге firstvds процесс apache так же занимает память на последних секундах и килится после выполнения скрипта. Вот я и хочу понять, т.к. скрипты запускаются аналогичные, причину такого поведения второго сервера. Думал, причина в конфике apache, но они идентичны на этих двух серверах. Значит, причина где-то ещё.

N
На сайте с 06.05.2007
Offline
419
#4

scrivente, все что вы описываете - нормальное поведение apache.

Нужно просто научиться с этим жить. Поэтому вам и советуют изменить количество процессов и количество запросов перед остановкой одного процесса.

Подбирайте эти значения до удовлетворения.

Из тех же соображений ставят nginx, если речь все-таки идет о сайте с реальными пользователями. И вы поставьте.

В некоторых хороших скриптах техника программирования такова, что они специально удаляют использованные массивы и объекты перед тем как перейти к следующему шагу обработки. Таким образом общая планка памяти ниже.

Кнопка вызова админа ()
iHead
На сайте с 25.04.2008
Offline
137
#5

MaxRequestsPerChild=1

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
Andreyka
На сайте с 19.02.2005
Offline
822
#6
scrivente:


Проблема не в количестве процессов или вы имели в виду что-то другое.

Как раз не работают. На сервере запускается 1 скрипт (вручную). При каждом запуске задействован 1 процесс apache2 и некоторые другие, причём каждый раз новый. На последних секундах выполнения скрипта % используемой памяти возрастает с 4 до 17-20 и всё, в таком состоянии процесс apache2 остаётся.

У вас очень плохие скрипты, так как по симптомам это похоже на утечку памяти

M
На сайте с 24.10.2011
Offline
173
#7
iHead:
MaxRequestsPerChild=1

good one bro

Artjom77
На сайте с 11.09.2007
Offline
75
#8

А, вы это имели ввиду.

Тогда вам поможет например:

StartServers 1

MinSpareServers 1
MaxSpareServers 3
ServerLimit 10

Apache стартует с 1 процессом, и при множестве запросов максимальное количество процессов - 10. Как только запросов больше нет, то количество процессов apache сокращается до 3.

Если через ps aux | grep apache будете смотреть, то процессов будет на 1 больше, так как один из них "менеджер".

Это я имел ввиду, если у вас используется prefork-модель. <IfModule mpm_prefork_module> ... </IfModule>

S
На сайте с 29.09.2009
Offline
133
#9

решил :)

/usr/sbin/apachectl graceful

Изящное убийство каждые 30 минут по крону. Хорошо то, что процесс, нагружающий память, убивается только после того, как скрипт будет выполнен.

seocore
На сайте с 25.09.2006
Offline
143
#10
scrivente:
Изящное убийство каждые 30 минут по крону.

устранение головной боли посредством отделения головы от тела 🍿

Инструменты для веб-мастера: кластеризатор СЯ (https://goo.gl/MQWfqO), все запросы конкурента (https://goo.gl/hd5uHS), дешевые XML-лимиты (https://goo.gl/aDZbPI)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий