You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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 100000root hard nofile 100000

内容的提问来源于stack exchange,提问作者Jose Cabrera Zuniga

火山引擎 最新活动