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)
所以我的问题有两个方面:
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。
我将从扩展服务器状态开始,看看是否可以在流量高峰期间显示任何明显的爬虫程序。