#<domain> <type> <item> <value>
* soft nofile 2097152
* hard nofile 2097152
* soft memlock 4194304
* hard memlock unlimited
* soft stack 524288
* hard stack unlimited
root soft nofile 2097152
root hard nofile 2097152
root soft memlock 4194304
root hard memlock unlimited
root soft stack 524288
root hard stack unlimited
设置的是这个为啥会看到的结果是
ulimit -n
1024
ulimit -Hn
524288
你在 /etc/security/limits.conf
中明明设置了:
* soft nofile 2097152
* hard nofile 2097152
root soft nofile 2097152
root hard nofile 2097152
但你登录后却看到:
ulimit -n => 1024 # soft limit
ulimit -Hn => 524288 # hard limit
这表示:
- 你的
nofile
限制没有完全按/etc/security/limits.conf
生效 - 但系统 部分提高了 hard limit 到 524288,不是你配置的
2097152
✅ 可能的真实原因(很可能是 systemd “覆盖掉了” limits.conf)
💡 现代系统(特别是 Ubuntu 16+、CentOS 7+/RHEL 7+)使用 systemd
启动服务和 shell session,不会默认读取 limits.conf
,而是通过 systemd 的 DefaultLimitNOFILE
控制。
🔍 核实你的 systemd 默认限制
你可以运行:
systemctl show --property=DefaultLimitNOFILE
结果可能是:
DefaultLimitNOFILE=1024:524288
这个意思是:
- soft = 1024
- hard = 524288
这就解释了你当前看到的 ulimit 输出。
✅ 解决方法:让 systemd 遵循你的限制(推荐)
你有两种方式可以修复:
🔧 方法 1:修改全局 systemd 限制(影响所有服务)
编辑:
sudo vim /etc/systemd/system.conf
sudo vim /etc/systemd/user.conf
找到并取消注释这两行(或者加上):
DefaultLimitNOFILE=2097152
然后:
sudo systemctl daemon-reexec
⚠️ 此方法对 login shell 和所有 systemd 启动的服务/终端都有效
🔧 方法 2:修改特定服务(如 containerd、kubelet、sshd)
创建或编辑对应服务 override 文件:
sudo systemctl edit sshd
输入以下内容:
[Service]
LimitNOFILE=2097152
保存后重启服务:
sudo systemctl daemon-reexec
sudo systemctl restart sshd
🔧 方法 3:如果你用的是 su
或 sudo
进入 root
sudo su
、su
默认不会创建 login shell(不走 pam)
所以你应该:
su - root # 带 `-` 才走 pam 和 limits.conf
或者直接从 ssh 登录,避免 sudo su
的中间壳限制。
✅ 推荐验证流程:
- 检查 systemd 默认限制:
systemctl show --property=DefaultLimitNOFILE
- 临时调高以测试:
ulimit -n 2097152
✅ 如果能成功说明只是 shell 启动限制问题。
- 最终目标:
ulimit -n # 应该默认是 2097152
ulimit -Hn # 应该也是 2097152
🧭 总结:
问题原因 | 是否符合你的情况 |
---|---|
systemd 的 DefaultLimitNOFILE 限制了你 |
✅ 很可能 |
使用了非 login shell(例如 sudo su ) |
✅ 可能 |
/etc/security/limits.conf 本身无效 |
❌ 配置正确 |
PAM 未加载 pam_limits.so |
如果你配置了就 ✅ |
systemd 启动服务时没有设置 LimitNOFILE |
✅ 如果你关心后台服务 |
需要我帮你定制一份修复流程(比如你的发行版是 Ubuntu 20.04,使用 systemd)可以继续贴出来,我可以一步步帮你操作。
⚠️警告:修改完 /etc/systemd/system.conf
后必须重启操作系统才能生效。