Apache 中的 clone(2) 延迟 30 秒

Apache 中的 clone(2) 延迟 30 秒

我遇到了 Apache 问题。一切都始于大约一周前(因此这可能与最新的系统更新有关)——我的监控工具向我发送了有关网站无法正常工作的短信。我检查了一下,看起来对简单 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 MB(VIRT/RSS)。服务器有 2GB RAM,仅使用 400MB(不含缓冲区/缓存)。

答案1

发生这种情况是因为 CONFIG_GRKERNSEC_BRUTE=y 内核选项。

相关内容