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

运行轻载Apache HTTPD 2.0的应用程序偶尔会遇到一个(或多个)Apache进程占用100%CPU的问题。 我们目前运行HTTPD 2.2,我们也可能已经看到这与2.2。 我不确定。 在某些情况下,CPU使用率会阻塞所有控制台访问托pipeHTTPD的Windows服务器。 我从来没有能够find什么可以导致Apache做到这一点。

环境是Apache HTTPD直接提供静态内容,使用mod_rewrite而不是其他定制configuration。 HTTPD正在通过mod_jk (1.2.25)与Apache Tomcat(5.x)通信。

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

 MaxRequestsPerChild 1000 

因为应用程序使用HTTP / 1.1,这实际上是每个subprocess超过1000个请求,而更多的是每个subprocess100,000个请求。

locking最有可能发生在模块中,而不是发生在Apache本身。 你的设置听起来很小,所以我怀疑mod_jk是罪魁祸首。 如果限制MaxRequestsPerChild修复问题,那么我会说这是一个可以接受的解决方法。 模块中的错误可能会在很长时间或很多请求之后才被触发,除非你真的热衷于跟踪这个错误,否则就会消失。

如果你想跟踪它,那么首先要做的就是configurationCoreDumpDirectory来指向服务器用户可以写入的某个位置。 如果你能得到违规stream程,将核心文件留下,那么它应该可以帮助你追踪问题的原因。 您可以在“ Apachedebugging指南”中find一些提示。

当我看到这是因为: – 托pipe的应用程序或脚本导致了这个问题。 例如,它有一个无限循环或什么 – 操作系统变得不稳定,由于locking或其他问题,在重新启动暂时解决了问题。

我的build议: – 重新启动机器。 – 等待,看看是否再次发生 – 重新启动服务器没有MODS等。 – 开始逐个打开每个模块,每次观察使用情况。

限制MaxRequestsPerChild将有助于内存使用情况,但不应以您所说的方式影响CPU。 可能发生的事情是你的mod_jk崩溃了,因为它是一个Apache模块,它在httpd进程下显示。

当你有一个不存在的日志目录时,我已经看到了这种情况。 我不知道为什么他们没有更好的处理,但你可能想确保所有的日志目录都在那里,进程可以写入。

为apache安装mod_proctitle

RLimitCPU并不总是有帮助,因为并不是所有的apache代码部分都检查它。

MaxRequestsPerChild可能也没有帮助,因为我已经看到这个相对'新鲜'的孩子。

在我的情况下,我怀疑这是与我们正在使用的模块(mod_perl),也许是一些套接字连接断开。 我们似乎只是看到浏览器连接的问题,而不是来自wget或curl(我们主要用于“数据传递”)。

我也遇到同样的问题,直到我找出问题的根源…

问题 :目前,我的网站在Windows云服务器上使用XAMPP运行Wordpress,CPU使用率达到100%

解决scheme :检查我的Apache日志文件(access.log),有人不断试图访问xmlrpc.php文件,每秒有10个请求使Apache服务器忙于处理传入的请求,所以在这里我build议你阻止传入从您的.htaccess文件访问xmlrpc.php文件,也阻止了我的主机提供商的IP,结果CPU使用率现在是3-5%最大。

注意:这个解决scheme适用于运行Wordpress的网站

http://devslounge.com/htaccess/can-cause-apache-httpd-use-100-cpu-indefinitely/

https://wordpress.org/support/topic/xmlrpcphp-attack-on-wordpress-38