Apache:查看哪个页面/虚拟主机正在杀死我的服务器

Apache:查看哪个页面/虚拟主机正在杀死我的服务器

我无法让我的 Web 服务器重新上线。服务器一直在崩溃,我不得不关闭电源并重新启动它。

我使用的是共享主机,因此找到罪魁祸首就更加困难了。

我如何才能找到哪个特定页面(或至少哪个虚拟主机)的 CPU 使用率异常高?

我在 CentOS 上使用相当标准的 Apahce+MySQL+PHP。

谢谢!

答案1

可能最好的想法是安装 apachetop。https://code.google.com/p/apachetop/,您也可以使用 Apache 的服务器状态,但 apachetop 会使其更具可读性。

答案2

页面实际上与这个问题无关。

以下命令应输出 httpd 的 pid 列表,按 CPU 百分比排序,并显示 httpd worker 所在的当前工作目录。

这当然假设 httpd 是罪魁祸首。

IFS=" "; ps -A ho pcpu,comm,pid | grep httpd | sort -k1n \
while read pcpu comm pid; do \
    echo -n "${pcpu"}: "l pwdx "${pid}"; 
done

我得到类似的输出;

0.0: 1850: /
0.0: 1852: /
0.0: 1854: /
0.0: 1853: /
0.0: 1855: /
0.0: 1856: /
0.0: 1857: /
0.0: 1858: /

这样做之所以有效,是因为 apache 会在虚拟主机内部执行任何工作之前将目录更改为虚拟主机文档根目录。因此,拥有该文档根目录的虚拟主机就是罪魁祸首。

如果有多个虚拟主机使用相同的文档根目录,则需要调查两个虚拟主机以了解它们在做什么。

由于我没有 apache 工作者占用 CPU 时间,所以它们都是 0.0,因此没有进行排序。

如果问题实际上是一个 SQL 查询,那么不要指望这会显示任何内容。

相关内容