为什么我的apache2,mod_fcgid,phpconfiguration导致100%的CPU使用率?

页面加载进行快速初始连接,然后在页面呈现之前挂起大约10秒钟。 当服务器负载增加时,我开始看顶部,我发现两个CPU在4-8个php-cgi进程之间有时被挂钩到100%。 我的理论是,因为我从来没有看到内存使用量永远不会超过50%,所以Apache能够处理请求进来,但排队他们的PHP进行处理。 我的mod_fcgid / phpconfiguration有什么问题?

RHEL 5.4
2 Xeon E5420s @ 2.50 Ghz
4 Gb RAM

Apache 2.2.3
超时30
保持活跃
MaxKeepAliveRequests 0
KeepAliveTimeout 5
<IfModule worker.c>
StartServers 2
MaxClients 300
MinSpareThreads 25 MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

mod_fcgid 2.2.10
LoadModule fcgid_module modules / mod_fcgid.so
<IfModule !mod_fastcgi.c>
AddHandler fcgid-script fcg fcgi fpl php
</IfModule>
SocketPath运行/ mod_fcgid
SharememPath run / mod_fcgid / fcgid_shm
DefaultInitEnv PHPRC“/ etc /”
FCGIWrapper / usr / bin / php-cgi .php
MaxRequestsPerProcess 1500
MaxProcessCount 20
IPCCommTimeout 240
空闲时间240

APC 3.0.19
extension = apc.so
apc.enabled = 1
apc.shm_segments = 1
apc.optimization = 0
apc.shm_size = 32
apc.ttl = 7200

APCcaching率为43%,命中率达到99%

几件事我会检查蝙蝠…

首先,你有什么打印出你的Apache错误日志? 您可能需要提高日志级别以“警告”以查看CGI进程的输出。 虽然在这种情况下,把它debugging可能是更有利的,因为Apache将打印出fcgi相关的日志信息。 检查访问日志也可能有助于查看apache是​​否返回403或500代码。

其次,您试图执行哪些PHP代码,以及如何对其进行testing? 虽然我希望能看到更多的cgi进程,但是在这方面可能会出现一些问题。 你是用一个沉重的脚本或者像phpinfo()这样简单的东西去做的。 ?

除了APC之外,还有其他的加速器(zend optimizer,eAccelerator等)吗? 当APCcaching和zend优化器都启用时,我有类似的事情发生。 显然他们相互冲突。

你运行的是什么版本的PHP? 你的内核是32位还是64位?

如果是这样 – 请参阅: http : //www.theregister.co.uk/2011/01/04/weird_php_dos_vuln/