如何理解Apache正在忙于什么?

我有一个Linux服务器上的Apache,并在其中的一个Python脚本(Trac,更具体)。 最小的stream量消耗了99%的CPU,平均负载高于3.00。 是否有可能了解它在那里做什么 – 光盘,networking,哪些文件等? 有些工具可以分析一个特定的过程是忙于什么?

编辑: strace apache2 -X给我看了很多内容相似的行:

 stat("/home/foo/apache/conf.d/trac-XXX.conf", {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0 open("/home/foo/apache/conf.d/trac-XXX.conf", O_RDONLY|O_CLOEXEC) = 6 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a93021000 fstat(6, {st_mode=S_IFREG|0644, st_size=1014, ...}) = 0 mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a9301e000 read(6, "contents of my trac-XXX.conf"..., 4096) = 1014 read(6, "", 4096) = 0 close(6) 

/home/foo/apache/conf.d/目录中的每个文件都有相同的行(我有数百个)。 你知道如何解释这些信息并解决问题吗? 看起来Apache正在重新加载每个HTTP请求上的所有configuration文件。

你可以使用straceman strace )。 作为根尝试

 strace `ps -e | grep apache2 | awk '{ print "-p"$1 }'` 

或类似与trac而不是apache2 。 您可能还需要configurationLogLevel进行debug

下面的编辑是黑暗中的狂野镜头,不熟悉Trac。

在Trac票3833 osimons之后的评论状态:

例如,如果您不使用mod_python,而是使用简单的CGI设置,则会为每个请求完全重新加载环境。 这样的请求基本上没有历史 – Python进程启动,模块加载,Trac处理开始,并且当请求完成时,整个Python进程死亡。

这也适用的原因是因为请求特定的信息(如预览示例)作为parameter passing给请求对象 – 在req上下文中可用。

所以问题是,你使用mod_python或普通的CGI来运行Trac? 如果您使用简单的CGI,那么很明显为什么Tracconfiguration文件会在每个请求中被读取。