1. 程式人生 > >處理redis連線數過多

處理redis連線數過多

故障描述:

redis伺服器連不上,應用程式報錯獲取不到連線,記憶體勾兌和狀態報告程式都會出問題

故障分析:

redis伺服器預設設定的最大連線數maxclients是10000,但是受伺服器最大檔案數影響,伺服器預設最大檔案數是1024,所以redis最大連線也為1024-32=992,由於網路原因或連線未正常關閉導致redis伺服器連線數接近990左右,應用程式連不上redis。

故障處理:

修改伺服器最大檔案數vi /etc/ scurity/ limits.conf  新增* soft    nofile  65536  * hard    nofile  65536設定最大檔案數65536,核心引數對檔案描述符也有限制,如果設定的值大於核心的限制,也是不行的,需設定vi /etc/sysctl.conf fs.file-max=65535,sysctl -p生效,設定好用ulimit -a 可以看到open files為65535,但是用cat proc/pid/ limits檢視redis的程序對應的max open files依然為992,原因是centos6.2版本以下,已經執行的程序是無法修改limits的,但是centos6.2以上可以通過echo -n ‘Max open files=65535:65535’ > /proc/pid/ limits命令,動態設定redis程序的最大連線數;正常情況下已經關閉客戶端但沒釋放的ESTABLISHED off連線是清理不掉的,只能殺掉對應redis埠,資料會丟失,但是redis有封裝好的方法CLIENT命令,能夠實現三種功能:檢查連線的狀態,殺掉某個連線以及為連線設定名字三種功能,CLIENT LIST 命令能夠獲取當前所有客戶端的狀態,CLIENT KILL 命令來殺死指定的連線了,所以可以通過CLIENT KILL來殺掉沒用但無法釋放的tcp連線,處理掉redis連線數過多無法連線的問題。