config set maxclients 10000 (error) ERR The operating system is not able to handle 解決方案

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章