Tcp

什麼可能導致不那麼忙的 redis 伺服器關閉連接?

  • March 23, 2015

我們在 redis 伺服器上有 17k tcp 連接處於 CLOSING 狀態。我的理解是,只有客戶端會啟動關閉連接,而不是來自 redis 伺服器。所以我應該在 redis 伺服器上看到 0 連接處於 CLOSING 狀態。有沒有人有一些經驗並知道根本原因?

‘redis-cli info’ 中的實際連接數小於 200,我們有足夠的記憶體和 cpu 空閒時間超過 90%。

我瀏覽了http://redis.io/topics/clients上的 redis 文件。那裡沒有任何項目可以幫助我找到根本原因。

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伺服器關閉連接。但是在這樣做之後,phpredis 會關閉 tcp 套接字本身,導致雙方都試圖關閉連接。因此,伺服器有很多連接卡在CLOSING狀態。

我為該問題創建了一個簡單的修復程序。https://github.com/phpredis/phpredis/issues/562

引用自:https://serverfault.com/questions/675838