我有一个运行 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 行。如果让它运行太久,您将得到一个相当大的文件。记住在收集到必要的信息后停止它。