使用到mongo,redis等数据库的时候,往往会遇到这样一个坑。某mongo跑着跑着突然没了,某redis启动先给个warning,仔细一看log说最大文件打开数不够..

# You requested maxclients of 10000 requiring at least 10032 
# max file descriptors.
# Redis can't set maximum open files to 10032 because of OS error: 
# Operation not permitted.
# Current maximum open files is 1024. 
# maxclients has been reduced to 4064 
# to compensate for low ulimit. 
# If you need higher maxclients increase 'ulimit -n'.

mongo 官方也给教程说你修改下 ulimit 就可以。

但实际上,若该用户是普通用户

$ ulimit -n 65535
-bash: ulimit: open files: cannot modify limit: Operation not permitted

若你用 root 当然可以, 但你真的想用 root 跑 db 么?

正确的打开方式其实应该是修改 limit.

打开 /etc/security/limits.conf, 添加内容如下:

your_user_name           soft    nofile          65535
your_user_name           hard    nofile          65535

或者若想要一加一个组

@your_group_name           soft    nofile          65535
@your_group_name           hard    nofile          65535

然后保存。

检查下 /etc/pam.d/sudo 或者 /etc/pam.d/common-session-noninteractive ,若没有发现如下这行信息,请自行加上

session    required     pam_limits.so

然后普通用户需要重新登录即可生效。若没有生效,这时普通用户应该也可以自行 ulimit -n 65535 了。

来自的你,很高兴你能看到这儿。若本文对你有所用处,或者内容有什么不足之处,敬请毫不犹豫给个回复。谢谢!