我已经运行带有标准 LAMP 堆栈的 Ubuntu 14.04 服务器一段时间了,系统会通过每日电子邮件向我报告每小时平均 CPU 使用率。很长一段时间以来,报告的 CPU 空闲时间大部分都在 90 多(这是一台负载较轻的服务器)。
大约一个月前,这种情况发生了变化,服务器现在报告的空闲时间是 80 多小时,而不是 90 多小时。top
这表明 Apache 消耗了最多的 CPU:
top - 00:20:43 up 39 days, 22:34, 1 user, load average: 0.34, 0.41, 0.39
Tasks: 165 total, 2 running, 163 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.0 us, 0.7 sy, 0.0 ni, 89.2 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 6110180 total, 5500892 used, 609288 free, 232448 buffers
KiB Swap: 0 total, 0 used, 0 free. 3502368 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16235 www-data 20 0 503848 77680 41564 S 8.3 1.3 0:04.28 apache2
16124 www-data 20 0 506624 86688 47888 S 8.0 1.4 0:06.23 apache2
16351 www-data 20 0 506456 79224 41364 S 7.3 1.3 0:01.54 apache2
16301 www-data 20 0 506356 78908 41156 S 7.0 1.3 0:02.93 apache2
16102 www-data 20 0 507116 87292 48272 S 6.6 1.4 0:06.88 apache2
1343 mysql 20 0 2670112 540216 8308 S 2.7 8.8 988:08.92 mysqld
16354 www-data 20 0 503248 76144 40636 S 1.3 1.2 0:01.29 apache2
16100 www-data 20 0 507016 80436 41524 S 1.0 1.3 0:07.12 apache2
我为此绞尽脑汁想找出我可能做了什么更改导致这种情况。在这段时间内,网络流量没有增加(事实上,它一直低于正常水平),我可以坐着看,apachetop
上面的输出继续,没有发生什么事情top
。
我今晚尝试应用所有最新补丁,希望也许是在最近的更新中引入了一些临时故障并且已经得到解决,但无济于事。
然后我突然想到,这大概就是我在服务器上安装 mod_security 的同一时间。从那时起,我就一直在观察模式下运行它。我今天晚上禁用了它并重新启动了 apache,但负载似乎没有受到更改的影响。
有人能建议我如何诊断 Apache 正在忙于做什么吗?这目前不是一个主要问题,但我想在它成为一个主要问题之前了解它!
答案1
原来是智利的某个火鸡每秒在我没有使用 apachetop 监控的 WordPress 网站上轮询 xmlrpc.php 几次。阻止有问题的 IP 地址很好地解决了这个问题!
如果有人再次来这里查看,我使用了 mod_status 来帮助我找到问题的根源。具体来说,在安装并启用 mod_status 后,我在我的一个虚拟主机上启用了 /server-status 路径,如下所示(替换<my-current-ip>
为我的客户端 PC 当前面向公众的 IP 地址):
<VirtualHost *:443>
ServerName myhost.com
...
<Location /server-status>
SetHandler server-status
Require ip <my-current-ip>
</Location>
...
</VirtualHost>
然后访问https://myhost.com/server-status
以全面了解系统上的网络流量。这很快就揭示了进入相关虚拟主机上的 xmlrpc.php 脚本的大部分流量。
从那里,我跟踪了该虚拟主机的访问日志,可以看到活动模式和源 IP 地址。然后就可以使用 ufw 阻止 IP 地址,如下所示:
sudo ufw insert 1 deny from <the-bad-ip>
注意:在该命令中使用“插入 1”可确保它在防火墙配置中的任何“默认允许”规则(例如端口 80 和 443)之前应用,否则过滤器将像巧克力茶壶一样无用!