什么会导致 Apache HTTPD 无限期地使用 100% CPU

Edd*_*die 3 performance httpd apache-2.2

运行轻负载 Apache HTTPD 2.0 的应用程序偶尔会遇到一个(或多个?)Apache 进程占用 100% CPU 的问题。我们目前运行的是 HTTPD 2.2,我可能在 2.2 中也看到了这一点。我不确定。在某些情况下,CPU 使用率很高,以至于它阻止了对托管 HTTPD 的 Windows 服务器的除控制台访问之外的所有访问。我一直无法找到导致 Apache 这样做的原因。

环境是 Apache HTTPD 直接提供静态内容,使用 mod_rewrite 但没有太多其他自定义配置。HTTPD 通过mod_jk(1.2.25)与 Apache Tomcat (5.x) 对话。

有没有其他人遇到过这个问题并解决了它?我们安装的解决方法是使用以下配置将每个 Apache HTTPD 子进程限制为最大请求数:

MaxRequestsPerChild 1000
Run Code Online (Sandbox Code Playgroud)

因为应用程序使用 HTTP/1.1,这实际上是每个子进程超过 1000 个请求,每个子进程更像是 100,000 个请求。

Joh*_*ton 5

锁定最有可能发生在模块中,而不是发生在 Apache 本身中。你的设置听起来很简单,所以我怀疑mod_jk是罪魁祸首。如果限制MaxRequestsPerChild解决了问题,那么我会说这是一个可以接受的解决方法。模块中的错误可能仅在长时间或多次请求后才触发,除非您真的很想跟踪它,否则让它消失可能就足够了。

如果您想跟踪它,那么首先要做的是配置CoreDumpDirectory指向服务器用户可以写入的某个位置。如果您可以让违规进程留下核心文件,那么它应该可以帮助您找到问题的原因。您可以在Apache Debugging Guide 中找到有关执行此操作的一些提示。