我运营着一个相当繁忙(每天 700,000 次页面浏览,php/mysql)的网站,流量稳定(通常没有峰值)。过去两天,大约在使用高峰时间,大约一个小时后,我的网站突然从非常快变为无响应,大约一个小时后,又恢复到超级快。
CPU 负载在凌晨 2:10 急剧上升:
12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
12:10:01 AM 1 270 2.54 3.56 4.00
12:20:01 AM 10 270 5.58 5.09 4.61
12:30:01 AM 9 297 10.06 9.63 7.22
12:40:01 AM 7 296 3.42 5.17 6.15
12:50:02 AM 8 291 4.36 4.57 5.43
01:00:02 AM 20 297 9.38 7.57 6.49
01:10:01 AM 6 279 5.83 6.86 6.90
01:20:01 AM 11 263 5.77 5.43 5.98
01:30:01 AM 2 291 6.70 5.56 5.66
01:40:01 AM 2 285 3.73 5.09 5.37
01:50:01 AM 6 285 3.84 4.65 5.11
02:00:01 AM 8 283 2.56 3.72 4.45
02:10:01 AM 2 431 14.67 10.88 7.34
02:20:01 AM 1 425 7.10 11.48 9.73
02:30:01 AM 4 453 10.30 12.79 11.23
02:40:01 AM 2 440 14.12 16.13 13.41
以下是我的统计数据:
Hostgator VPS 7 级,2 x 2GHz CPU,3.2G RAM,CentOS 5.9,Apache 2.2.19,MySQL
- 这段时间内Mysql没有出现任何异常负载
- Apache 显示所有工作者处于“W”状态。
- 重新启动、重新启动 mysql、重新启动 apache 均未解决问题
- apache 错误日志中没有任何异常(除了这段时间出现大量 503 错误)
我真的不知道从哪里开始调查这个问题。我很感激任何指点:
1 - 现在如何全面诊断此问题 2 - 或者当再次发生时,要安装哪些工具/运行哪些命令来捕获额外数据。
提前致谢。
答案1
如何诊断: - 绘制图表。使用 munin、cacti 或其他外部监控系统来了解到底是哪种资源结束了。 - 使用 atop 或 sar 获取有关时间轴中进程活动的详细信息。当您的服务器出现故障时,请检查向前移动的转储。
答案2
问题原来是 cpanel 系统 cron 作业行为不当,占用了所有 CPU,进而导致 apache 无法处理请求。