修改普通用户的最大文件打开数

使用到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 了。