我有一个奇怪的问题,我不知道如何进一步分析 – 有一个漂亮的轻量级网站上运行一个很不错的盒子(至强,4Gb内存,SATA)。 通过访问日志来判断,每秒钟约有120个请求。
加载平均 在一个盒子上几乎随机地跳跃5到20,但很less下降到10以下.CPU利用率大约是平均70%,是相当一致的。 有很多的Apache进程,他们似乎都locking在某些导致负载的东西上。 平均跳跃15以上,我不能完全弄清楚如何找出他们locking。
我可以使用什么来查看apache进程内部发生了什么,以及它在哪里阻塞?
strace其中一个正在运行的进程可以提供帮助
netstat -n |grep :80|cut -c 45-|cut -f 1 -d ':'|sort|uniq -c|sort -nr|more
(可能需要调整45 – 取决于Linux的版本)
也许:
tail -n 10000 access.log|cut -f 1 -d ' '|sort|uniq -c|sort -nr|more
你有没有忙的IP?
如果CPU是70%,这意味着它是计算负载而不是文件locking。 我会怀疑一个PHP脚本,正在做很多计算,以显示一个页面。 如果您看到服务器的IP在任何一个列表中显示为高,也许是recursion包括。 或者,如果你有include(' http://localserver.com/file.php '); 有时这可以推动更高的负载,因为PHP必须通过套接字包含该文件。
你正在接近MaxClients? 任何在Apache错误日志?
在顶层查看时,是否有任何apache进程似乎占用了很多cpu? 如果是这样的话,试着把其中一个看看它在做什么。 它会提供一些噪音,但是,你可能会看到一个模式。 您可以使用脚本strace -p processid来观察它,然后在最后控制d,并有一个名为typescript的文件,其中包含所有的信息。
我怀疑你有一个PHP应用程序,可能会烧毁大量的CPU或者做大量的计算,甚至像遍历一个有数以万计的文件的文件的目录一样简单的事情。 也有可能你有一个mod_rewrite正在做一些redirect。 基于CPU负载相当稳定的事实,它可能是locking一个文件的东西,但是,似乎更像是你有一个recursion获取或某人触发一个页面触发的东西。
根据op的评论,你应该调整保持活跃的超时时间,通常它们在默认configuration上相当高。
另外,如果每秒有很多连接,并且保持活动超时时间很长,则可能会导致文件描述符用尽,从而导致io等待。