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

发布了173 篇原创文章 · 获赞 326 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/William0318/article/details/104682854