Tcp
什麼可能導致不那麼忙的 redis 伺服器關閉連接?
我們在 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