如何找出导致 Apache/httpd 内存使用率如此之高的原因

如何找出导致 Apache/httpd 内存使用率如此之高的原因

我有一个网站,当蜘蛛程序攻击时,它就会失控。通常情况下一切正常。我们有一个 nagios 监视器,当 CPU 使用率超过 80% 时会报告。

当我们收到警告时,我开始通过 查看日志sudo tail -f access_log。大多数情况下,它是一个蜘蛛。

它似乎被蜘蛛程序用无数个查询字符串值打包的一个 URL 所困扰。

我尝试过的:

我已经将其放入Disallow: *?*robots.txt 中。

当前top阅读:

在此处输入图片描述

在此处输入图片描述

问题:

还有其他方法可以用来告诉蜘蛛在我们的网站上冷静下来吗?在内存使用率高的 httpd 进程中,我能否知道这些进程正在调用哪些页面,以便隔离此网站上的问题点?

也就是说,我该如何找到并隔离麻烦制造者?

勘误表: 我们在带有 memcache 的 RHEL 6.8 上运行 Apache 2.2.15。

# apachectl -V
Server version: Apache/2.2.15 (Unix)
Server built:   Feb  4 2016 02:44:09
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)

答案1

您可以尝试使用 lsof 读取 apache 进程打开的文件:

lsof -p PID

检查 apache 日志中与访问日志中的蜘蛛爬行时间戳相对应的错误也是一个好主意。

我还喜欢使用 goaccess 来帮助解析日志数据并推断有用的信息:

http://www.hackersgarage.com/goaccess-on-rhelcentos-6-linux-real-time-apache-log-analyzer.html

strace 和 ltrace 也是非常出色的实用程序,您可能想要考虑使用它们来帮助排除故障。

相关内容