Linux 上使用 Apache 时 CPU 使用率随机偏高

Linux 上使用 Apache 时 CPU 使用率随机偏高

最近我的网络服务器出现了一个奇怪的问题。在过去的一天左右,网站似乎在随机间隔内有所减慢,我们似乎没有遇到任何重大的额外流量,但是快速查看“top”和 httpd 似乎从 3-10% 跳升到 99% 左右,然后短暂地达到 80% 左右,然后又回落。例如:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
2443 apache    25   0  256m  20m 5472 R 88.2  2.1   3:22.29 httpd

这似乎每 30 分钟左右就会发生一次。奇怪的是,在发生这种情况的同时,我可以运行 Apache 服务器状态页面并会得到(例如):

CPU Usage: u700.5 s6.22 cu0 cs0 - 20.2% CPU load

所以我的问题有两个:

  1. 有谁知道为什么这个问题可能在过去一天左右出现(服务器没有发生任何变化)
  2. 为什么我的 CPU 使用率统计数据远远高于服务器状态,哪个是正确的?

答案1

Apache 服务器状态页面中的 CPU 使用率是自 Apache 启动以来的平均使用率,因此它不会显示这样的峰值。当您遇到这些负载峰值时,您可以检查服务器状态页面以查看正在服务哪些页面/客户端(ExtendedStatus 必须处于打开状态)。

您还可以使用 netstat 查看当前正在访问您机器的客户端:

 netstat -an | grep ESTABLISHED

如果您连续运行几个小时,并且流量激增,您可能会发现重复出现的 IP 地址,并可能追踪到特定的机器人/爬虫。如果确实如此,您可以考虑使用robots.txt限制机器人对您网站的抓取能力。

编辑:在繁忙的服务器上,上述 netstat 命令应显示一些条目,例如:

tcp        0      0 10.2.212.13:80              216.146.52.21:24979         ESTABLISHED
tcp        0      0 10.2.212.13:80              86.174.113.138:54901        ESTABLISHED
tcp        0      0 10.2.212.13:80              94.1.216.253:51204          ESTABLISHED
tcp        0      0 10.2.212.13:80              24.9.61.204:62936           ESTABLISHED

客户端的 IP 地址将在右侧。如果您只看到 1 或 2 行,则仅表示此时只有您的 ssh 连接。当您的负载增加时再次检查。您也可以删除 grep 以列出所有连接,尽管这将包括大量旧的 TIME_WAIT。

我将从扩展的服务器状态开始,看看是否可以在流量高峰期间显示任何明显的爬虫。

答案2

检查你的访问日志。由于间隔非常规律,数据挖掘器或爬虫可能会访问你网站上的每个页面。

答案3

创建一个简单的可执行文件:

#!/usr/bin/sh
# use IP
 netstat -na |grep ESTABLISHED
# use NAMES
# netstat -ta |grep ESTABLISHED

“ta” 将打印出 DNS 名称,因此请取消注释您喜欢的名称。

然后将其放入一个按间隔运行文件的程序中,例如 crontab。我会阅读此手册页,您可能甚至无法使用它。您将需要将输出发送到日志以供将来使用。如果您希望记下运行时间,则可以向脚本添加日期命令。crontab 示例:

#minute hour dayofmonth monthofyear dayofweek
0,15,30,45 * * * * <path/to/script> > <log>

这是用 crontab -e 编辑的(再次阅读手册页)。

您可以使用它来对 access.log 中的顶级条目进行排序:

awk '{print $1}' access_log | sort |uniq -c |sort -n

如果您确实看到网页响应缓慢,请查看 I/O 等待,有时 CPU 使用率“高”并不是什么大问题。

答案4

我怀疑您使用的是四核 CPU。在这种情况下,您很容易陷入这样的境地:top 将返回每个核心的负载百分比,而其他工具会将此数字除以核心数,以得出整个 CPU 的总体负载数字。

就变化而言,我倾向于给出与 Hyppy 相同的建议。

相关内容