有问题的 FastCGI 配置——503 错误

有问题的 FastCGI 配置——503 错误

我遇到了 FastCGI 挂断问题,有些网站可以访问,但其他网站返回 503 服务不可用错误(如果我等待足够长的时间才能得到响应)。这台主机上有很多域名无法访问。这是一台有 1000 个域名的服务器。它运行良好,但偶尔会变慢,直到我们切换到 FastCGI。然后,它立即加速,但随后许多网站无法访问。在我们拥有的另外两台服务器上,FastCGI 在 1000 个域名上运行良好,我无法确定这个配置有什么不同。

这是 CentOS 5。从 /etc/httpd/logs/error_log 中,我反复看到这些条目。也许它们可以为我需要做什么提供线索?

[warn] [client 50.50.50.50] mod_fcgid: can't apply process slot for /home/example/public_html/example.com/index.php
[warn] mod_fcgid: too much processes, please increase FCGID_MAX_APPLICATION
[error] [client 50.50.50.50] Premature end of script headers: index.php
[warn] [client 50.50.50.50] mod_fcgid: read data timeout in 400 seconds

我们的 /etc/httpd/conf/php.conf 显示了这种安排:

# Fastcgi configuration for PHP5
LoadModule fcgid_module modules/mod_fcgid.so
MaxRequestsPerProcess 1000
#FcgidMaxProcesses 100
#FcgidProcessLifeTime 60
MaxProcessCount 500
IPCCommTimeout              400
IdleTimeout                 400
ProcessLifeTime 60
#DefaultMinClassProcessCount 120 
AddHandler fcgid-script .php5 .php4 .php .php3 .php2 .phtml
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .php5
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .php4
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .php
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .php3
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .php2
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .phtml

答案1

通过识别服务器负载瓶颈可以解决进程槽错误。在我的例子中,是磁盘 I/O。我通过在 Web 目录上运行此命令来修复该问题。在本例中,所有网站都在 /home 上:

chattr -R +A /home

然而,在你这样做之前,请注意后果:

http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec73.html

http://en.wikipedia.org/wiki/Stat_%28Unix%29

请注意,chattr 仅适用于现有文件。除非您重新运行 chattr,否则较新的文件将不会获得此属性。如果您已将 /home 托管在另一个分区上,那么您可以编辑 /etc/fstab 并在该分区上添加 noatime 参数。

您还可以设置一个 cron 作业,每隔一段时间在您的 /tmp 文件夹上运行 chattr,以加快 PHP 页面执行速度(通常缓存在 /tmp 中)。

另一个错误与“[警告] mod_fcgid:进程过多,请增加 FCGID_MAX_APPLICATION”有关——这似乎是 Apache FastCGI 团队提交的一个错误。有些人通过从最新代码重新编译源代码来修复它。有些人通过从 C 源代码中注释掉该错误并重新编译来修复它。

相关内容