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


Wordpress Environment and Exceedingly high usage (PHP-FPM)

我在我的服务器上运行一个Wordpress实例。我的服务器需要同时支持至少1000个并发。

我在Apache上使用PHP- fpm (PHP 5.4)与FastCGI以及Memcache,以及APC为我的opt-caching。我们有两个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.
根据我目前提供的信息,你能帮我找到一个方向,以便开始诊断这个问题吗?如有需要,我可以提供更多信息。

这些错误在两种情况下很常见——XMLRPC攻击或包装器配置不允许所需的FastCGI生成。问题是太宽与组合的Apache2与Nginx在前面。我是按步骤写的。

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

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

PHP_FCGI_CHILDREN=0 
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS

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

fastcgi_buffers 256 16k;
fastcgi_max_temp_file_size 0;

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

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

同样,作为第五步,有xdebug分析器用于检查。

指出:

  • 如果担心数据库故障,使用WordPress功能修复数据库。然而,这是不可能的。
  • 你应该正确配置iptables, fail2ban,限制wp-login.php访问等