什么可能导致一个不那么繁忙的Redis服务器closures连接?

redis服务器上,我们有17k的tcp连接处于CLOSING状态。 我的理解是,只有客户端会启动closures连接,而不是从redis服务器。 所以我应该在Redis服务器上看到CLOSING状态下的0连接。 有没有人有一些经验,并知道根本原因?

“redis-cli info”中的实际连接数量less于200,我们有足够的内存和CPU空闲时间超过90%。

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

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 

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

基本上phpredis发送一个QUIT命令来要求redis服务器closures连接。 但是这样做后,phpredisclosures了自己的TCP套接字,导致双方试图closures连接。 因此,服务器有这么多的连接卡在CLOSING状态。

我已经为这个问题创build了一个简单的修复。 https://github.com/phpredis/phpredis/issues/562