我有一个networking服务器设置,为一堆域提供基于虚拟主机的虚拟主机,并一直工作得很好。 服务器使用Apache运行Ubuntu。 PHP运行的是FastCGI而不是Apache模块。
自星期天早上以来,apache2进程偶尔会达到100%的CPU使用率,并坚持在那里,不再提供任何请求,直到它被重置。 简单的重新启动Apache解决了这个问题。
所有的网站都设置为使用FastCGI的PHP解释器,所以我怀疑的最糟糕的问题来源(错误的PHP脚本)应该导致php5-cgi封顶的CPU,而不是apache2,对不对?
有没有什么办法能够以某种方式询问apache2进程,看看现在在做什么?
简单的networking日志调查不会显示任何可疑的活动或缓慢的请求泛滥。
有点难倒 – 目前只是运行一个监视脚本,检查一个猖獗的apache2进程,并重新启动它,如果find。
更新:
这个过程今天早上再次盯住了100%,一个快速strace -f -p [pid]导致了下面的输出。 这6行重复与屏幕滚动一样快。
wait4(3437, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0 wait4(5497, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0 wait4(5504, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0 wait4(3436, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0 wait4(4035, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0 wait4(3437, 0x7fffaf867184, WNOHANG|WSTOPPED, NULL) = 0
你可以尝试附加到stream氓程序使用strace :
strace -f -p [PID]
这将显示进程正在进行的系统调用,如果有的话。 请注意,这个过程可能并不是在系统调用中浪费CPU时间,而是执行实际的进程内工作,但是如果进程进入一个涉及系统调用的循环,这将会给你提供有价值的信息。