LINUX.ORG.RU
ФорумAdmin

Почему зависает apache2?

 , , , ,


0

1

Стоит nginx/1.8.0 и httpd 2.2.15 на CentOS 6.7 mpm конфиг следующий:

ServerLimit 500
StartServers 4
MinSpareServers 4
MaxSpareServers 8
MaxClients 500
KeepAlive On
KeepAliveTimeout 5
MaxRequestsPerChild 3000
ListenBacklog 512

В sysctl.conf задействованы следующие опции:

vm.overcommit_ratio = 100
vm.overcommit_memory = 2

Но я не уверен что эти опции влияют на проблему.

После имитации высокой нагрузки либо ддоса, с помощью siege и последующей остановки нагрузки, апач частенько подвисает, strace говорит следующее:

[pid 63565] <... restart_syscall resumed> ) = 0
[pid 63565] clone(child_stack=0, >flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, >child_tidptr=0x7f9421beeab0) = -1 ENOMEM (Cannot allocate >memory)
[pid 63565] write(2, «[Thu Jan 28 12:58:31 2016] [erro»..., 96) >= 96
[pid 63565] rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
[pid 63565] rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 63565] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 63565] nanosleep({10, 0},
[pid 63565] <... nanosleep resumed> 0x7ffe6a49de20) = 0
[pid 63565] clone(child_stack=0, >flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, >child_tidptr=0x7f9421beeab0) = -1 ENOMEM (Cannot allocate >memory)
[pid 63565] write(2, «[Thu Jan 28 12:58:41 2016] [erro»..., 96) >= 96
[pid 63565] rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
[pid 63565] rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
[pid 63565] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 63565] nanosleep({10, 0},

Бывает что подвисает не на долго, на 1-2 минуты например, а затем просыпается и начинает убивать своих детей и нормально работать, а иногда подвисания бывают и более долгие, например 20 минут (более ждать не мог, рестартанул железку). Но бывает и так что не зависает. Если в момент подвисания апача, попытаться рестартануть апач, то мастер процесс умрет и больше не запуститься потому что все дети остаются висеть в системе. В общем бьюсь уже неделю, не могу понять в чем проблема. Есть идеи?

P.S. Мне вот еще что интересно, даю нагрузку, затем нагрузку останавливаю, при этом в сторону приложения не идет ВООБЩЕ никаких запросов, но strace показывает что апач все еще продолжает обрабатывать в течении какого-то времни какие-то запросы. Думал что это нгинкс ему доотправляет то что наполучал, но если отключить нгинкс в этот момент, то апач все равно обраюатывает какие-то запросы, как-будто из какой то очереди. Пробовал ставить ListenBacklog 1, картина та же

Cannot allocate >memory

вероятно проблема тут?

а затем просыпается и начинает убивать своих детей

жесткий он, этот апач. Настоящий индеец.

upcFrost ★★★★★
()

Out of memory же, как бе.

А зачем плодить два веб-сервера, у вас ЧПУ через .htaccess что ли сделаны?

svr4
()
Ответ на: комментарий от svr4

Ну нгинкс фронтом отдает статику, а за ним апач для всего остального. Out of memory и что? Что мешает мастер процессу убивать детей? Ведь мастер уже занял память и работает, так почему он не грохает лишних детей, если эти дети не задейстовованы, а MaxSpareServers 8 ?

zdravnik
() автор топика
Ответ на: комментарий от zdravnik

Я про дефолтовое nginx + fpm. Апач-то по сути и не нужен, если не используются его фичи (читай, .htaccess распиханные по половине директорий и AllowOverride all в корне, за сочетание которых надо отрывать ноги).

На хиленькой vps, если хорошо покрутить настройки кэширования в apc/opcache, да мемори лимит выкрутить - даже 8 процессов хватит чтобы выжрать те полгига памяти.

svr4
()
Последнее исправление: svr4 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.