为什么我的 apache2、mod_fcgid、php 配置导致 CPU 使用率 100%?

为什么我的 apache2、mod_fcgid、php 配置导致 CPU 使用率 100%?

页面加载会快速建立初始连接,然后在页面呈现前约 10 秒挂起。当服务器负载上升时,我开始观察 top,发现两个 CPU 有时会在 4-8 个 php-cgi 进程之间达到 100%。我的理论是,由于我从未看到 RAM 使用率超过 50%,因此 apache 能够处理传入的请求,但会将它们排队等待 PHP 处理。我的 mod_fcgid/php 配置有什么问题?

RHEL 5.4
2 Xeon E5420s @ 2.50 Ghz
4 Gb RAM

Apache 2.2.3
超时 30
KeepAlive On
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 run/mod_fcgid
SharememPath run/mod_fcgid/fcgid_shm
DefaultInitEnv PHPRC "/etc/"
FCGIWrapper /usr/bin/php-cgi .php
MaxRequestsPerProcess 1500
MaxProcessCount 20
IPCCommTimeout 240
IdleTimeout 240

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

APC 缓存使用率为 43%,命中率为 99%

答案1

有几件事我要立即检查一下……

首先,您的 Apache 错误日志中是否打印了任何内容?您可能需要将日志级别提升至“警告”,以便查看 CGI 进程的输出。不过在这种情况下,将其提升至调试级别可能更有益,因为 apache 将打印出与 fcgi 相关的日志信息。查看访问日志可能也会有所帮助,以查看 apache 是否返回 403 或 500 代码。

其次,您尝试执行哪些 PHP 代码以及如何测试它?虽然我原本希望看到更多 cgi 进程,但可能这方面存在问题。您是要使用繁重的脚本还是使用像 phpinfo(); 这样的简单脚本?

答案2

除了 APC 之外,您是否还配置了其他加速器(zend 优化器、eAccelerator 等)?当 APC 缓存和 zend 优化器都启用时,我也遇到了类似的情况。显然它们相互冲突。

答案3

你运行的是哪个版本的 PHP?你的内核是 32 位还是 64 位?

如果是的话——请参见:http://www.theregister.co.uk/2011/01/04/weird_php_dos_vuln/

相关内容