Ubuntu Mate 16.04.4 LTS无法提升最大打开文件数求助
解决Ubuntu Mate 16.04.4 LTS中无法提升open files限制的问题
我来帮你一步步排查和解决这个文件描述符限制的问题,这是Linux系统里很常见的配置坑:
1. 补全/etc/security/limits.conf的配置
你只添加了hard限制,但soft限制才是当前会话实际生效的上限,普通用户只能调整到soft limit的数值。把配置改成下面这样:
myusername soft nofile 100000 myusername hard nofile 100000
注意:一定要把myusername替换成你真实的用户名,别留占位符。
2. 确保PAM模块加载生效
Ubuntu依赖PAM服务来应用limits.conf的设置,检查以下两个文件是否包含必要配置:
- 打开
/etc/pam.d/common-session,确认存在这一行:session required pam_limits.so - 同样检查
/etc/pam.d/common-session-noninteractive,确保上面的配置行也存在(SSH或非交互式会话会用到这个文件)
3. 处理systemd的全局限制(关键步骤!)
Ubuntu 16.04默认使用systemd,它的全局限制优先级高于limits.conf,会覆盖你的配置:
- 编辑
/etc/systemd/system.conf,找到DefaultLimitNOFILE行,取消注释并修改为:DefaultLimitNOFILE=100000 - 再编辑
/etc/systemd/user.conf,同样将DefaultLimitNOFILE设置为100000 - 执行命令重启systemd让配置生效:
sudo systemctl daemon-reexec
4. 验证设置是否生效
不要只依赖ulimit -a,可以用更准确的命令检查:
- 查看当前进程的实际限制:
cat /proc/self/limits | grep "Max open files" - 完全退出当前用户会话后重新登录(或者重启系统),再执行
ulimit -n,应该会显示100000了
为什么你之前的操作失败?
- 只设置hard limit没设置soft limit:普通用户无法直接突破soft limit,所以
ulimit -n 100000会提示权限不足 - systemd全局限制优先级更高:即使改了
limits.conf,systemd的默认设置会强制覆盖,导致你的配置不生效 sudo ulimit -n无效:ulimit是shell内置命令,sudo创建新shell时不会继承你的limits设置,而且要给root用户改限制的话,也需要在limits.conf里添加root soft nofile 100000和root hard nofile 100000
内容的提问来源于stack exchange,提问作者Jose Cabrera Zuniga




