Назад | Перейти на главную страницу

clone (2) 30-секундная задержка в apache

У меня проблема с apache. Все началось около недели назад (так что это может быть связано с последними обновлениями системы) - мои инструменты мониторинга отправляют мне SMS о неработающем сайте. Я проверил, и похоже, что запрос к тривиальному cgi (реализованному на perl) занял 30 секунд. После перезапуска apache проблема была исправлена ​​в течение следующих нескольких часов / дней, а затем повторилась.

Изначально я подозреваю php, потому что это было только обновление (5.3.15-> 5.3.18), которое могло повлиять на apache. Я пытался опозорить его до версии 5.3.15, но это не решило эту проблему.

Затем я сделал strace, и похоже, что задержка происходит при системном вызове clone ():

[pid 26659] 1356268557.675934 clone( <unfinished ...>
[pid 26659] 1356268587.684401 <... clone resumed> child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xa1033768) = 32169 <30.008452>

Сам cgi запускается после этого и работает нормально и быстро:

[pid 32169] 1356268587.686614 execve("/var/www/mysite.com/mycgi.cgi", ["/var/www/mysite.com/mycgi.cgi"], [/* 26 vars */]) = 0 <0.000776>

Есть идеи, почему это может произойти? Как и почему clone (2) может блокироваться на 30 секунд ?! И успешно вернуться после этого ... Похоже, что таймаут внутри clone (), потому что он всегда ровно 30 секунд.

Я использую последнюю версию Hardened Gentoo Linux, ядро ​​3.5.4-hardened-r1, apache 2.2.23 (prefork, mod_cgi).

Обновить: Наверное, стоит добавить: этот сервер не сильно загружен. Потомки Apache используют только около 120/40 МБ (VIRT / RSS). Сервер имеет 2 ГБ оперативной памяти, и используется только 400 МБ (без буферов / кеша).

Это происходит из-за параметра ядра CONFIG_GRKERNSEC_BRUTE = y.