![Apache 占用大量 CPU,大多数连接处于等待状态](https://linux22.com/image/690998/Apache%20%E5%8D%A0%E7%94%A8%E5%A4%A7%E9%87%8F%20CPU%EF%BC%8C%E5%A4%A7%E5%A4%9A%E6%95%B0%E8%BF%9E%E6%8E%A5%E5%A4%84%E4%BA%8E%E7%AD%89%E5%BE%85%E7%8A%B6%E6%80%81%20.png)
几天前,我的 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 耗时较长,你就可以采取一些措施来确定原因。也许可以通过添加调试代码或其他方法。