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

问题描述 投票:0回答:2

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

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

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

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

重启php5-fpm可以解决这个问题。

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

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

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

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

任何人都可以解释问题可能是什么?

谢谢!

php nginx debian opcode-cache
2个回答
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每次读/写操作花了> 100ms。清除APCu变量没有帮助。代码的所有其他部分都具有正常速度。

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

所以看来,这个APCu版本在加载PHP 5.6时不稳定。至少对我们而言。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.