使用 Apache 在 Linux 上随机高 CPU 使用率

stu*_*err 5 linux cpu-usage apache-2.2

我最近在我的网络服务器上遇到了一个奇怪的问题。在过去一天左右的时间里,该站点似乎以随机的间隔变慢了一些,我们似乎没有遇到任何重大的额外流量,但是快速查看“顶部”和 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
Run Code Online (Sandbox Code Playgroud)

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

CPU Usage: u700.5 s6.22 cu0 cs0 - 20.2% CPU load
Run Code Online (Sandbox Code Playgroud)

所以我的问题有两个方面:

  1. 有谁知道为什么这个问题可能在最后一天左右突然出现(服务器没有进行任何更改)
  2. 为什么我的 CPU 使用统计数据会大大高于服务器状态,哪个是正确的?

ues*_*esp 2

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

您还可以使用 netstat 查看当前有哪些客户端正在访问您的计算机:

 netstat -an | grep ESTABLISHED
Run Code Online (Sandbox Code Playgroud)

如果您运行此程序超过几个小时并且出现流量高峰,您也许能够发现重复出现的 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
Run Code Online (Sandbox Code Playgroud)

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

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