什么可能导致不太繁忙的 redis 服务器关闭连接?

什么可能导致不太繁忙的 redis 服务器关闭连接?

在 redis 服务器上,有 17k 个 tcp 连接处于 CLOSING 状态。我的理解是,只有客户端才会发起关闭连接,而不是来自 redis 服务器。所以我应该在 redis 服务器上看到 0 个处于 CLOSING 状态的连接。有没有人有经验并知道根本原因?

'redis-cli info' 中的实际连接数小于 200,并且内存绰绰有余,并且 CPU 空闲时间超过 90%。

我浏览了 redis 文档http://redis.io/topics/clients。那里没有任何项目可以帮助我找到根本原因。

redis version: 2.6.7

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
  1 CLOSE_WAIT
  16980 CLOSING
  128 ESTABLISHED
  21 LAST_ACK
  12 LISTEN
  1 SYN_RECV

答案1

这是由我们用于连接 redis 服务器的 phpredis 库引起的。

基本上,phpredis 会发送QUIT命令要求 redis 服务器关闭连接。但在执行此操作后,phpredis 会自行关闭 tcp 套接字,导致双方都尝试关闭连接。因此服务器有很多连接处于卡住CLOSING状态。

我已经针对该问题创建了一个简单的修复程序。https://github.com/phpredis/phpredis/issues/562

相关内容