【问题标题】:Wordpress Environment and Exceedingly high usage (PHP-FPM)Wordpress 环境和超高使用率 (PHP-FPM)
【发布时间】:2017-02-18 18:52:35
【问题描述】:

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

我在 Apache 上使用 PHP-FPM (PHP 5.4) 和 FastCGI 以及 Memcache,以及用于我的 opt-caching 的 APC。我们有两台 MySQL 服务器作为从服务器运行。

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

Ram: 32GB
CPU: 8 Cores

我的运行 Apache 服务器的用户使用以下 ulimit:

Hard: 4096
Soft: 1024

间歇性地我们有停机时间,当这个停机时间袭击我们时,我们会收到来自 Nginx 的 500 个错误(它充当我们在单独服务器上的负载均衡器)。 当我们收到这 500 个错误(范围从 500 到 504)时,在 htop 上我可以看到我们的 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.

根据我迄今为止提供的信息,您能否帮助我找到前进的方向,以便开始诊断此问题?如果需要,我可以提供更多信息。

【问题讨论】:

  • 尽管存在当前问题,但您拥有一个好的分析/监控工具会很有帮助。我目前正在使用newrelic.com,但很少有朋友推荐blackfire.io
  • 感谢您的回复。我们正在运行 New Relic,我已请求访问。我可以从那里发布任何可能有助于进一步诊断的问题吗?
  • 它将帮助您跟踪峰值、瓶颈和潜在问题。我认为这个问题太广泛而且太“相对”了,不能只发布来自 New Relic 的特定信息,而是寻找任何可疑的东西。你知道你的系统,所以如果给定的函数吃得太多,仔细看看。与周期/毫秒相同。
  • 我的系统管理员增加了 32GB 的 RAM。这不是我满意的解决方案,因为我们不应该坐在 32GB 的使用量和 600 个并发数上。该网站已停止倒塌,但我的 htop 显示我的 RAM 使用(几乎是静态的)32GB。
  • 通常这是 htaccess 文件的问题。您有权访问 htaccess 文件吗?如果是的话,你能把它贴出来吗?

标签: php wordpress apache apache2 apache2.4


【解决方案1】:

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

FastCGI 有效防止站点受到拒绝服务攻击或因内存泄漏而崩溃。对于 Nginx PHP-FPM,这种情况总是需要检查 XMLRPC 攻击(或类似的蛮力)并阻止它。如果一个IP一天内请求600次,显然是攻击。所以以上是第一步,你正在检查XMLRPC 攻击,阻止WP 臭名昭著的XMLRPC 文件加上多次重复请求少数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_sizefastcgi_buffers -

fastcgi_buffers 256 16k;
fastcgi_max_temp_file_size 0;

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

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

另外,作为第五步,还有xdebug profiler进行检查。

注意事项:

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

【讨论】:

  • 谢谢,您回答了这个问题。我将开始使用您的步骤进行诊断,希望我能在某个地方找到。
  • 不客气。如果所有步骤都失败了,我们就在你身后。
猜你喜欢
  • 2016-07-14
  • 2018-06-13
  • 2020-08-25
  • 2020-09-16
  • 2012-03-20
  • 2021-05-27
  • 2013-09-25
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多