在 CentOS 里,ulimit 默认只对当前 shell 会话有效,要永久生效需要写到系统配置里。下面按常见场景给你完整说明(CentOS 7/8 通用)。
/etc/security/limits.confsudo vi /etc/security/limits.conf
在文件末尾添加(示例):
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
说明:
nofile:最大打开文件数nproc:最大进程数*:对所有用户生效(可换成具体用户名)soft:软限制(可临时超过)hard:硬限制(不可超过)✅ 重启或重新登录后生效
pam_limits.so 是否启用查看:
grep pam_limits /etc/pam.d/system-auth
如果没有类似:
session required pam_limits.so
手动加上(一般默认是有的)。
如果是 systemd 启动的服务(如 Java、Nginx、数据库),limits.conf 不会生效!
sudo vi /etc/systemd/system/xxx.service
在 [Service] 段加:
LimitNOFILE=65535
LimitNPROC=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart xxx
sudo vi /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
重启系统生效。
sudo vi /etc/security/limits.d/用户名.conf
username soft nofile 65535
username hard nofile 65535
ulimit -n
ulimit -u
⚠️ 注意:
limits.conf| 现象 | 原因 |
|---|---|
| limits.conf 不生效 | systemd 服务 |
| su 切换用户不生效 | 没走 PAM |
| docker 容器不生效 | 宿主机限制 |
| 场景 | 做法 |
|---|---|
| 普通用户 | /etc/security/limits.conf |
| systemd 服务 | service 文件加 LimitNOFILE |
| 所有服务 | systemd system.conf(慎用) |
如果你愿意,可以告诉我:
我可以给你精确到文件的配置示例。