Nginx php-fpm在高负载下写入连接堵塞

时间:2015-11-08 17:03:39

标签: php nginx debian opcode-cache

我们在 debian 8 系统上使用 php5-fpm(5.6)运行 nginx / 1.6.2

在过去的几天里,由于更多的用户访问我们的服务器,我们的负载比平常高。大多数访客在晚上6点至午夜之间来访。

几天以来,运行上述设置的两台不同服务器在几个小时内显示出非常慢的响应速度。在Munin,我们看到,在“写作”状态下突然有<数百个nginx连接,以前一次只有大约20个。

在尝试访问这些服务器时,除了远程主机上的超时连接之外,我们不会收到任何错误。我看到的所有日志都很正常。

问题可以通过重启php5-fpm来解决。

我的问题现在是:为什么突然有数百个流程宣称他们正在撰写?是否有一些已知的问题或者我们错过的配置设置可能导致此问题?

以下是我们看到的症状的完整列表:

  • 而不是&lt; 20个非常快速的活动连接我们在写入状态中看到多达100到900个连接(所有nginx连接命中php5-fpm,这些服务器不提供静态内容)平均。 php脚本的脚本运行时为80ms。
  • 只有当nginx请求的总量超过300 / s时才会出现问题,然后从~350降低到~250 req / s,但这250个显示最多900个“写入”连接
  • 其中许多连接最终超时并且没有给出正确的结果
  • 我们的日志中没有错误
  • eth /数据库流量以及CPU负载对应于总计下降的250req / s的较低级别,因此没有“写”发生。

对于设置: 如上所述。我们使用Zend的内置操作码缓存,APCu用于某些用户变量缓存,其中一个服务器运行一个memcache实例(在整个问题中工作正常),另一个运行Redis版本,该版本也运行正常问题发生了。

任何人都可以解决问题所在吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我们发现了问题:使用PHP 5.6,APCu似乎不稳定。

详细说明:

  • debian 8
  • 的nginx / 1.6.2
  • PHP 5.6.14-0 + deb8u1
  • APCu 4.0.7(修订版:328290,126M shm_size)

我们使用xhprof在服务器缓慢时查询请求(请参阅问题)并注意到,APCu采用&gt;每次读/写操作100ms。清除APCu变量没有帮助。代码的所有其他部分都具有正常的速度。

我们完全禁止使用APCu,系统一直稳定。

看来,这个APCu版本在PHP 5.6负载下不稳定。至少对我们而言。

答案 1 :(得分:0)

我们遇到了同样的问题,其原因是Redis中的数据超过了“最大内存”,因此redis无法再写入任何数据。我可以使用redis-cli登录,但无法设置值,如果遇到此问题,可以使用redis-cli登录到redis并尝试进行设置,如果redis内存已满,则会出现错误。