未知 Apache 进程的高 CPU 使用率

Dan*_*Dan 5 apache-2.4

我正在使用 Apache 2.4 和 PHP 5.5 在 CentOS 6.6 上运行 WHM/cPanel 服务器。每周左右,所有六个内核的 CPU 使用率都会飙升至 100%,并一直保持到 Apache 重新启动,此时一切都会恢复正常。有趣的是,Apache 的server-status页面似乎并不知道这些进程存在:

最佳:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
25901 nobody    20   0 1973m  28m  276 R 74.8  0.4   3:39.30 httpd
24861 nobody    20   0 1973m  28m  280 R 74.1  0.4  12:05.31 httpd
25076 nobody    20   0 1973m  28m  276 R 65.8  0.4  10:09.38 httpd
24727 nobody    20   0 1973m  28m  280 R 64.5  0.4  14:37.09 httpd
25874 nobody    20   0 1973m  28m  276 R 64.5  0.4   3:57.69 httpd
24747 nobody    20   0 1973m  28m  276 R 64.1  0.4  15:06.89 httpd
25998 nobody    20   0 1973m  28m  276 R 63.8  0.4   2:40.92 httpd
25624 nobody    20   0 1973m  28m  276 R 61.8  0.4   5:28.76 httpd
25646 nobody    20   0 1973m  28m  276 R 58.8  0.4   5:07.88 httpd
Run Code Online (Sandbox Code Playgroud)

状态页面:

Server Version: Apache/2.4.12 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4
Server MPM: event
Server Built: Mar 27 2015 11:20:11

Current Time: Tuesday, 09-Jun-2015 09:21:07 CDT
Restart Time: Tuesday, 02-Jun-2015 11:38:37 CDT
Parent Server Config. Generation: 12
Parent Server MPM Generation: 11
Server uptime: 6 days 21 hours 42 minutes 30 seconds
Server load: 8.17 7.35 10.46
Total accesses: 461541 - Total Traffic: 10.7 GB
CPU Usage: u111.81 s369.94 cu305989 cs438.15 - 51.4% CPU load
.774 requests/sec - 18.7 kB/second - 24.2 kB/request
7 requests currently being processed, 118 idle workers

PID     Connections     Threads   Async connections
        total accepting busy idle writing keep-alive closing
21715   1     yes       1    24   0       1          0
4766    0     yes       0    25   0       0          0
10222   0     yes       0    25   0       0          0
10278   6     yes       6    19   0       0          0
10194   0     yes       0    25   0       0          0
Sum     7               7    118  0       1          0
_____________________W__________________________________________
_____________W__W____W____W_W___W___.........................___
______________________
Run Code Online (Sandbox Code Playgroud)

Apache 的状态页面报告的所有请求似乎都没有任何意义,这是有道理的,因为没有列出占用 CPU 的 PID。内存使用、磁盘 I/O 和网络流量在整个过程中都保持相对平稳,并且问题不会在一天中的一致时间出现。这台服务器上有几十个小站点,手动搜索访问日志会很困难。

什么可能导致这种情况?我只是误解了 Apache 报告数据的方式吗?有没有更好的方法来跟踪负责的流程并查看它实际在做什么?

小智 0

有2个可能的原因:

  1. 备份 - cPanel 备份过程有点繁重,因此首先检查 Apache 负载是否在备份过程开始后几秒/分钟开始。

  2. 大量更新——可能性更大;cPanel 每天都会下载大量不同的更新和检查,并且在更新期间会运行许多奇怪的内部重量级程序,包括许可证验证程序,这有时会给某些用户带来问题。

不幸的是,cPanel 的 Apache 与重量级 cPanel CGI 脚本绑定在一起,这些脚本负责执行这些更新和验证的某些部分。根据我的 cPanel 经验,我敢打赌这些 CGI 脚本正是造成 Apache 问题的原因,因为它们与 cron 作业之间的交互导致了死锁。

要检查这两个原因,请通过以 root 身份运行来逐一禁用 cron 作业:

crontab -e
Run Code Online (Sandbox Code Playgroud)

尝试一次仅禁用一项服务并等待一周,直到您看到下一个高 CPU 使用率或找到有问题的服务。