我如何跟踪mod_perl中的CPU密集型请求?

在Ubuntu 8.04上使用Apache 2.2和mod_perl我在服务器上有几个应用程序。 在预分支模式下使用Apache。 通常事情都很好,但偶尔我会看到一个使用100%CPU的Apache进程。

有几个网站在服务器上有自己的VirtualHosts,有和SVN服务器通过Apache运行。

我怎么能跟踪哪个应用程序和该应用程序中的哪些调用产生高负载?

Devel :: NYTProf几乎是目前Perl的首要分析器,使用Devel :: NYTProf :: Apache可以轻松分析mod_perl应用程序。

请参阅Tim Bunce:NYTProf v2 – perl轮廓测量仪的一项重大进步,可以很好地概览图片。

不幸的是,Devel :: NYTProf没有预先打包在Ubuntu Hardy中。 (它预先打包在Jaunty,Karmic,Lucid和后来的)。你可以使用一些小小的技巧从这些发行版安装软件包,从CPAN安装,或者只是升级;-)

如果你的apache配置中有一个大型的subversion版本库和基于路径的授权,你将会看到一些长期运行的,高CPU的apache任务。 你也可能会抱怨颠覆用户有关缓慢的提交和更新,以及503错误和颠覆抱怨截断的SSL响应。 如果是这样的话,我会让颠覆成为我的主要嫌疑犯。

使用自定义日志格式或者写一个PerlLogHandler来记录请求信息以及PID和资源使用信息。 例如,参见Randal的Web Techniques专栏48 。