update:只查看了长查询的缓存更新时间,它们并没有与服务器崩溃时间发生冲突。
update2:找到问题的原因。广告服务器已关闭并且服务器挂起,即使我们似乎正确设置了套接字超时。有没有办法测试超时行为?
我们有一个非常繁忙的服务器。~3K 并发连接服务器有 32GB ram 2xCPUs。我们有服务不可用错误问题。服务器没有响应 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>
# php.ini <96> 的路径默认为 /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 配置:
<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
update:只查看了长查询的缓存更新时间,它们并没有与服务器崩溃时间发生冲突。
update2:找到问题的原因。广告服务器已关闭并且服务器挂起,即使我们似乎正确设置了套接字超时。有没有办法测试超时行为?