mod_fcgid:无法为错误应用进程槽

时间:2011-03-09 10:45:12

标签: php apache2 mod-fcgid

更新:只关注长查询的缓存更新时间,它们不会与服务器崩溃时间冲突。

update2 :找到问题的原因。广告服务器已关闭,服务器挂起,即使我们似乎正确设置套接字超时。有没有办法测试超时行为?

我们的服务器非常繁忙。 〜3K并发连接 服务器有32GB RAM 2xCPU。我们有服务不可用的错误问题。 服务器没有响应500错误,错误日志显示数百/数千行:

[warn] mod_fcgid: can't apply process slot for /var/www/fcgi-bin.d/php5-default/php-fcgi-wrapper

我们认为它可能是配置错误或数据库连接/查询错误。 php进程更新缓存,这是一个非常复杂的查询结果。每天运行两次3个单独的查询。我启用了慢查询日志。我怀疑在我们的情况下查询是否超过了php运行时间限制20秒(在以下文件中设置)。任何帮助表示赞赏。

我们使用带有mod_fcgid的apache worker mpm模型。

这是fcgid.conf文件:

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock

# Communication timeout: Default value is 20 seconds
IPCCommTimeout 20

# Connection timeout: Default value is 3 seconds

IPCConnectTimeout 3

和/etc/apache2/conf.d/php-fcgid.conf文件:

<IfModule !mod_php4.c>

    #phd.ini的路径&lt; 96&gt;默认为/ etc / phpX / cgi     DefaultInitEnv PHPRC = / etc / php5 / cgi

# Number of PHP childs that will be launched. Leave undefined to let PHP decide.
# DefaultInitEnv PHP_FCGI_CHILDREN 8

# Maximum requests before a process is stopped and a new one is launched
DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1500
# Maximum number of PHP processes.
MaxProcessCount       45

# Define a new handler "php-fcgi" for ".php" files, plus the action that must follow
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php-fcgi-wrapper

# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php

# Define alias "/fcgi-bin/". The action above is using this value, which means that
# you could run another "php5-cgi" command by just changing this alias
Alias /fcgi-bin/ /var/www/fcgi-bin.d/php5-default/

# Turn on the fcgid-script handler for all files within the alias "/fcgi-bin/"
<Location /fcgi-bin/>
    SetHandler fcgid-script
    Options +ExecCGI
</Location>

Apache2 worker mpm config:

<IfModule mpm_worker_module>
StartServers         10
MaxClients           2048
ServerLimit          2048
MinSpareThreads      30
MaxSpareThreads      100
ThreadsPerChild      64
ThreadLimit          100
MaxRequestsPerChild   5000

我们查看了此网页上的说明并加载了高服务器配置: http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

更新:只关注长查询的缓存更新时间,它们不会与服务器崩溃时间冲突。

update2 :找到问题的原因。广告服务器已关闭,服务器挂起,即使我们似乎正确设置套接字超时。有没有办法测试超时行为?

3 个答案:

答案 0 :(得分:2)

google很好地解决了您的问题。看起来您必须使用配置(使用MaxProcessCount等选项)。

我建议用nginx替换apache。我的表现更好。此外,nginx使用的内存比apache少得多。我正在使用php-fpm来快速cgi。

答案 1 :(得分:1)

重启你的服务器。我用这种方式解决了这个问题〜

答案 2 :(得分:0)

移动 - &gt; nginx作为soons尽可能。 试试 - &gt;使用APC缓存用于分布式系统或文件缓存系统的单个服务器memcached 使用 - &gt;数据库索引正确。这是我经历过的最重要的事情之一。