2

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:找到问题的原因。广告服务器已关闭并且服务器挂起,即使我们似乎正确设置了套接字超时。有没有办法测试超时行为?

4

3 回答 3

2

google很好地涵盖了您的问题。看起来您必须对配置进行一些操作(使用 MaxProcessCount 等选项)。

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

于 2011-03-09T11:01:07.267 回答
0

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

于 2014-02-12T05:13:57.847 回答
0

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

于 2011-03-09T11:35:06.350 回答