我在运行 Apache 的网站时不时会遇到问题 - 这些盒子会自发地陷入混乱,占用所有可用的 CPU 和内存。为此,我决定提供一个名为mod_log_slow尝试一下,看看是否能够查明事情的真相。
如果您的平均请求耗时超过 1 秒,mod_log_slow 将返回以下内容:
VFz-@RFSe6WBtx2tOdv0qgAAAAw [07/Nov/2014:12:23:05 -0500] elapsed: 1.25 cpu: 0.04(usr)/0.01(sys) pid: 8059 ip: 1.2.3.4 host: www.example.com:80 reqinfo: GET /dining?start=20& HTTP/1.1
您可以通过查看以下代码来了解此日志是如何生成的源代码,但它应该是相对不言自明的。
然而,我很快就发现,慢速日志中有一些线条显得格格不入。
1f7b:545d003d:0 [07/Nov/2014:12:24:13 -0500] elapsed: 53.33 cpu: 0.02(usr)/0.00(sys) pid: 8059 ip: 1.2.3.4 host: (null):80 reqinfo: (null)
没有主机?没有请求?没有唯一 ID?保持打开状态 53 秒?我在正常访问日志中也找到了确切的请求,但同样令人困惑:
1.2.3.4 - - [07/Nov/2014:12:24:13 -0500] "-" 408 - "-" "-"
广阔的体育世界里到底发生了什么事?
答案1
如果您在端口 80 上打开与服务器的连接,则会出现这些日志行,例如
telnet 1.2.3.4 80
或nc 1.2.3.4 80
但不要发送任何东西并只是等待超时。
这可能是任何原因,从编写糟糕的脚本到测试 DOS 攻击(查看 slowloris)。但从您的日志行来看,这似乎不是导致 CPU 问题的原因。