Apache 占用大量 CPU,大多数连接处于等待状态

Apache 占用大量 CPU,大多数连接处于等待状态

几天前,我的 Apache 服务器随机开始占用 CPU,在此期间网站变得缓慢且无响应。

以下是事件发生期间 mod_status 显示的内容:

  • 几乎所有连接都处于等待状态
  • 一些连接处于 Keep-Alive 状态。所有连接的 Req 列值(处理最新请求所需的毫秒数)都在 15 到 40 秒之间,比平时长 10-20 倍
  • 在此期间,运行 top 命令显示所有 4 个 CPU 的使用率均为 100%,其中顶部有 5-7 个 Apache 子进程,每个进程占用 10-40% 的 CPU

每次事故持续 15 至 30 分钟,然后情况会暂时恢复正常,直到发生另一起事故。

服务器配置和统计:

  • 配有 4 个 CPU、8 GB RAM 的 Digital Ocean droplet
  • LAMP 堆栈运行一个 Wordpress 站点,每天大约有 40K 次点击(受 XMLRPC 保护,受 wp-login 保护)
  • MySQL 性能似乎正常(查询日志记录缓慢,没有什么异常)

我甚至不知道从哪里开始,因此如果能提供任何有关调试的建议我将非常感激。


服务器版本:Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.11
服务器 MPM: prefork
服务器建立时间:2015 年 7 月 24 日 17:25:11
当前时间:2016 年 10 月 2 日星期日 08:41:09 EDT
重启时间:2016 年 10 月 2 日星期日 07:55:53 EDT
父服务器配置。代数:1
父服务器 MPM 代数:0
服务器正常运行时间:45分15秒
服务器负载:105.26 38.36 22.87
总访问量:32705 - 总流量:367.2 MB
CPU 使用率:u455.08 s51.66 cu0 cs0 - 18.7% CPU 负载
12 个请求/秒 - 138.5 kB/秒 - 11.5 kB/请求
目前正在处理 144 项请求,有 39 名工人闲置
_WWWWWWWWW_WKWWWWWW__WWWW._WW.WWWW___W.WWWW__WWW_W_WWWW_WW.W_WWWW
_W.WCWW_WW.WKWWWWWWWWWW_WWWKW.W_K_.KW__K.W._WWWWW__WWWWWWWW._WKW
WWWK.WW_WW__WWWWWWWW__WWW_WWWW_WWWWWW_._WWWKK____WWW_WWWWWWWWWWWW
_。万维网。
记分牌键:
“_” 等待连接,“S” 正在启动,“R” 读取请求,
“W” 发送回复,“K” 保持活动(读取),“D” DNS 查找,
“C” 关闭连接,“L” 记录,“G” 优雅地完成,
“I” 空闲清理工作者,“。” 没有当前进程的开放槽

答案1

W代表“发送回复”(根据服务器状态输出中的键),而不是某种形式的等待状态。这是收到请求的完整主体和完成发送响应之间的状态。

扩展状态在 Apache v2.4 中默认为打开状态,但如果您已将其关闭,请将其重新打开,它将向您显示哪些 URL 运行了很长时间,因此可能为您提供一些有关正在发生什么的提示。它很可能已经出现在您已显示的输出下方。

您还可以将其添加%D到您的访问日志格式中,以便您可以发布分析哪些请求需要很长时间。

一旦你知道了哪些特定的 URL 耗时较长,你就可以采取一些措施来确定原因。也许可以通过添加调试代码或其他方法。

相关内容