防止 Apache 导致的高平均负载

防止 Apache 导致的高平均负载

我有一个运行 Apache 的远程服务器,上面有一些网站。有时平均负载上升太多,导致 Web 服务器无响应。

我认为这是由 Apache 引起的,但我无法检查,因为登录时 ssh 会话会自动关闭。我可以通过重新启动服务器来解决这个问题(实际上,我必须致电提供商手动重新启动它)。

重新启动后,我可以在 Cacti 上检查平均负载是否太高(超过 100)。

有人能解释一下找到并解决问题的方法吗?也许我需要一个触发器或类似的东西来在平均负载上升时重新启动 Apache;这可能是一种有用的方法吗?

答案1

您需要做的第一件事是监控正在发生的事情,当您获得更多详细信息时再回来更新您的问题。

使用一个小脚本,每隔几秒查询一次系统和内存负载,并将该信息保存到文件中。可能是这样的:

#!/bin/sh
while true
do
    echo "-------`date`--------"
    echo "\t\t%MEM\t%CPU"
    ps ax -o comm,%mem,%cpu | sort -nk3 | tail -n 3
    sleep 30
done

该脚本将打印占用 CPU 最多的三个进程的使用情况统计信息,然后打印占用内存最多的三个进程的使用情况统计信息。然后它将等待 30 秒(您可以通过为 指定不同的数字来更改该时间sleep)并再次执行所有操作。在我的系统上,它的输出如下所示:

$ ./monitor.sh
-------Mon Feb  4 20:00:51 CET 2013--------
                %MEM %CPU
java             9.1  3.6
Xorg             3.3  4.9
firefox          8.1 12.2
        ---     
Xorg             3.3  4.9
firefox          8.1 12.2
java             9.1  3.6

将此脚本保存为 monitor.sh 并使其可执行,然后在后台运行,同时将其输出重定向到文件:

chmod 744 monitor.sh
./monitor.sh > usage.log &

您可以通过运行来监控进度tail -f usage.log

让它运行一段时间,然后在服务器下次无响应时检查发生了什么。不过要小心,脚本每 30 秒打印出 9 行。如果让它运行太久,您将得到一个相当大的文件。记住在收集到必要的信息后停止它。

相关内容