1、引言
最近測試環境總是報 AUTH failed ERR max number of clients reached, 排查redis.conf發現配置是10000
實時連接數才4000多,怎麼會報錯呢
2、排查
登錄上該redis實例
10.1.22.65:6401> config get maxclients
1) "maxclients"
2) "4064"
難道配置沒生效,我又打算採用config set maxclient 10000, config rewrite寫到文件中,結果報
10.4.221.65:6401> config set maxclients 10000
(error) ERR The operating system is not able to handle the specified number of clients, try with 4064
10.4.221.65:6401>
通過網上查閱資料,得知
1、找到redis實例的id, 然後cat /proc/pid/limits
其實卻是該進程的使用數量4096
2、懷疑是否每個用戶的打開文件數量有限制,通過嘗試
vim /etc/security/limits.conf
然後重啓該redis實例,再次cat /proc/pid/limits
發現數量變了,再次查看config get maxclients
發現也變成了10000,也生效了,最終解決了這個問題
3、總結
(1) 命令列出打開文件描述符的數量
使用以下命令命令顯示打開文件描述符的最大數量:
cat /proc/sys/fs/file-max
(2)
要查看httpd或oracle用戶的硬值和軟值,請發出以下命令:在此示例中,su爲oracle用戶,輸入:
# ulimit -Hn
# ulimit -Sn
(3) 已達到最大文件數,如何解決此問題?
許多應用程序(例如Oracle數據庫或Apache Web服務器)需要的範圍更高。因此,可以通過如下所述在內核變量/proc/ sys/ fs/ file-max中設置一個新值(以root用戶身份登錄)來增加打開文件的最大數量:
# sysctl -w fs.file-max=100000
上述命令將限制限制爲100000個文件。您需要編輯/etc/sysctl.conf文件並放置以下行,以便在重新啓動後該設置將保持不變:
# vi /etc/sysctl.conf
如下添加config指令:
fs.file-max = 100000
保存並關閉文件。用戶需要註銷並重新登錄以使更改生效,或者只需鍵入以下命令:使用以下命令
# sysctl -p
驗證設置:
# cat /proc/sys/fs/file-max
或# sysctl fs.file-max
(4) 用戶級別的FD限制
上面的過程設置了系統範圍的文件描述符(FD)限制。但是,您可以通過編輯/etc/security/limits.conf文件將httpd(或任何其他用戶)用戶限制爲特定限制,輸入:
# vi /etc/security/limits.conf
設置httpd用戶的軟限制和硬限制,如下所示:保存並關閉文件。要查看限制,請輸入:
httpd soft nofile 4096
httpd hard nofile 10240
ulimit 相關資料:https://www.cnblogs.com/zhangmingcheng/p/6438994.html