Apache 进程挂起且 CPU 使用率达到 100%

Apache 进程挂起且 CPU 使用率达到 100%

我在使用 Apache (MPM Prefork) 和 mod_php 时遇到了一个奇怪的问题。服务器运行了一段时间,在随机时间之后,一些进程挂起,并且占用了 100% 的 CPU。

 1741 fileu  20   0  840m  65m  41m R 100.0  0.3 441:49.97 httpd
12200 fileu  20   0  836m  61m  41m R 100.0  0.3 191:42.99 httpd
14023 fileu  20   0  837m  66m  45m R 100.0  0.3 101:49.21 httpd
16530 fileu  20   0  838m  64m  42m R 100.0  0.3 136:46.84 httpd
17094 fileu  20   0  837m  73m  51m R 100.0  0.3 176:53.57 httpd
27652 fileu  20   0  835m  54m  35m R 100.0  0.2 306:45.53 httpd
28681 fileu  20   0  834m  75m  57m R 100.0  0.3 121:55.73 httpd
32203 fileu  20   0  836m  67m  47m R 100.0  0.3  77:00.48 httpd

CPU 利用率也随着平均负载上升。其他 Apache 进程运行良好。我试图使用,strace -p 32203 -s 80 -o /root/httpd.log但文件是空的。也error_log没什么特别的。重启后,一切正常。

我该怎么做才能检查这个过程发生了什么以及为什么它使用了 100% 的 CPU?

有关服务器的一些详细信息:

  • 2.6.32-504.8.1.el6.x86_64 #1 SMP 2014 年 12 月 19 日星期五 12:09:25 EST x86_64 x86_64 x86_64 GNU/Linux
  • Red Hat Enterprise Linux Server 版本 6.6(圣地亚哥)
  • PHP 5.6.6 和 Zend OPcache v7.0.4-dev
  • 阿帕奇/2.2.15

答案1

如果问题是基于 PHP 的,您可以使用 xdebug 分析来捕获一些数据,然后使用 wincachegrind 或 kcachegrind 对其进行分析(请参阅http://www.xdebug.org/docs/profiler)。但是,如果在生产服务器上执行此操作,请务必小心,因为这会增加额外的负载并迅速耗尽磁盘空间。

或者,您可以使用 xdebug 跟踪来查看发生这种情况之前正在执行的最后一行代码。您可以指定跟踪的编写方式,使进程 ID 成为文件名的一部分,以便您可以进行匹配。

相关内容