在 CentOS 中,ulimit 的永久设置通常分为两种情况:用户级(登录用户) 和 系统/服务级(systemd)。下面按常见场景说明。
/etc/security/limits.conf这是最常用的方法。
vi /etc/security/limits.conf
示例(设置用户 appuser 的打开文件数):
appuser soft nofile 65535
appuser hard nofile 65535
或对所有用户:
* soft nofile 65535
* hard nofile 65535
常见参数:
nofile:打开文件数nproc:进程数core:core 文件大小⚠️ 注意:
pam_limits.so,确保:grep pam_limits /etc/pam.d/login
/etc/pam.d/system-auth
/etc/security/limits.d/ 下新建文件(推荐)CentOS 默认会加载该目录:
vi /etc/security/limits.d/99-app.conf
内容同上:
appuser soft nofile 65535
appuser hard nofile 65535
如果是 通过 systemd 启动的服务(如 nginx、java),
limits.conf 不会生效!
systemctl edit nginx
或编辑:
vi /usr/lib/systemd/system/nginx.service
在 [Service] 段增加:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
重新加载:
systemctl daemon-reload
systemctl restart nginx
查看是否生效:
cat /proc/<pid>/limits
某些资源还需调整内核参数:
vi /etc/sysctl.conf
示例:
fs.file-max = 1000000
生效:
sysctl -p
ulimit -a
ulimit -n
| 场景 | 是否生效 |
|---|---|
| SSH 登录用户 | limits.conf ✅ |
| su 切换用户 | limits.conf ✅ |
| systemd 服务 | limits.conf ❌ |
| crontab 任务 | limits.conf ❌(需单独设置) |
如果你能说明:
我可以给你精确配置示例。