Wordpress环境和超高使用率(PHP-FPM)

时间:2016-10-10 11:01:35

标签: php wordpress apache apache2 apache2.4

我在服务器上运行Wordpress实例。我的服务器需要一次支持至少1,000个并发。

我在Apache上使用PHP-FPM(PHP 5.4),使用FastCGI以及Memcache,使用APC进行选择性缓存。我们有两个MySQL服务器作为从属服务器运行。

服务器具有以下资源容量:

Ram: 32GB
CPU: 8 Cores

运行Apache服务器的用户使用以下ulimit进行操作:

Hard: 4096
Soft: 1024

我们经常停机,当这个停机时间到达我们时,我们会收到来自Nginx的500个错误(在单独的服务器上充当我们的负载均衡器)。 当我们得到这500个错误(它们的范围从500到504)时,我可以看到我们已经最大化了我们的RAM使用率,间歇性地,我们的CPU使用率(我假设数据库相关?)。 消耗这些资源的过程是PHP-FPM子进程。

我不是系统管理员,我只是开发人员。所以它开始摆脱我的影响。

php错误日志似乎报告了以下内容:

[Mon Oct 10 12:54:33 2016] [error] [client 155.234.240.16] (104)Connection reset by peer: FastCGI: comm with server "/[MYURL].fcgi" aborted: read failed, referer: [MYURL]
[Mon Oct 10 12:54:33 2016] [error] [client 155.234.240.16] FastCGI: incomplete headers (0 bytes) received from server "/[MYURL].fcgi", referer: [MYURL]
[Mon Oct 10 12:54:34 2016] [error] [client 146.231.88.181] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

根据我迄今给出的信息,您是否能够协助我找到进入的方向,以便开始诊断这个问题?如果需要,我可以提供进一步的信息。

1 个答案:

答案 0 :(得分:4)

这些错误在WordPress的两种情况下很常见 - XMLRPC攻击或包装器配置不允许所需的FastCGI产生。 Apache2与Nginx的结合使问题变得更加广泛。我写的是步骤。

FastCGI有效地防止站点被拒绝服务攻击或由于内存泄漏而崩溃。对于Nginx PHP-FPM,这种情况总是要求检查 XMLRPC攻击(或类似的暴力)并阻止它。如果一个IP在一天内请求600次,显然这是一次攻击。所以上面是第一步,你正在检查XMLRPC攻击,阻止WP的臭名昭着的XMLRPC文件加上多次重复请求的IP次数。这里写的是如何检查假的PHP5-FPM攻击 - {Nginx的wordpress-xml-rpc-attack-fake-php5-fpm-error日志(你是前面有Nginx的Apache2,你可以使用我在该指南中编写的命令来提取错误或IP)。

作为第二步,Apache2 + PHP-FPM本身的不完整标头要求您查看用于FastCGI生成的fcgi包装器(/dev/shm/blackmou-php.fcgi)或.htaccess。这是包装器配置的一个例子:

PHP_FCGI_CHILDREN=0 
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS

我们还需要从memory_limit增加php.ini。对于 Nginx 的类似情况,我们会调整fastcgi_max_temp_file_sizefastcgi_buffers -

fastcgi_buffers 256 16k;
fastcgi_max_temp_file_size 0;

如果上述问题不是第三步,请在WP_DEBUG文件中启用wp-config.php。您可能会看到更好的插件问题错误消息,但不保修。

如果不是问题,请执行第四步,停用所有插件并使用默认主题几分钟。如果没有出现,主题或插件有问题。

另外,作为第五步,有xdebug profiler用于检查。

注意:

  • 如果您担心数据库有问题,请使用WordPress功能修复数据库。但不太可能。
  • 您应该已正确配置iptables,fail2ban,限制wp-login.php访问等。