在 CentOS(以及大多数 Linux 发行版)中,ulimit 可以“永久生效”,但不是通过一条命令直接永久生效,而是需要写配置文件,并且“永久”的范围要分清楚。
下面分情况说明:
ulimit 为什么不是“直接永久”ulimit 是 shell / 进程级别 的限制:
ulimit -n 65535所以:
❌
ulimit本身不能“永久” ✅ 需要通过配置文件或 systemd 来“每次启动自动设置”
/etc/security/limits.conf适用于:
vim /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
说明:
* 表示所有用户(也可写用户名)soft:警告值hard:最大值nofile:打开文件数nproc:进程数⚠️ 注意:
/etc/pam.d/login 中有 pam_limits.so)✅ 重新登录后生效:
ulimit -n
/etc/security/limits.d/*.confCentOS 推荐方式(避免改主文件):
vim /etc/security/limits.d/20-nofile.conf
内容同上。
如果你是 CentOS 7+,并且程序是:
那么 limits.conf 可能不生效!
vim /usr/lib/systemd/system/nginx.service
在 [Service] 下加:
LimitNOFILE=65535
LimitNPROC=65535
然后:
systemctl daemon-reload
systemctl restart nginx
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
systemctl daemon-reexec
vim /etc/profile.d/ulimit.sh
ulimit -n 65535
ulimit -u 65535
⚠️ 只对 交互式 shell 有效
| 场景 | 是否生效 |
|---|---|
| SSH 登录用户 | ✅ limits.conf |
| crontab 任务 | ❌(除非 systemd) |
| systemd 服务 | ❌ limits.conf |
| 容器里 | 看宿主机 + 运行时 |
CentOS 中 ulimit 不能“命令永久”,但可以通过:
/etc/security/limits.conf(用户登录)- systemd
Limit*参数(服务)实现“永久生效”
如果你愿意,可以告诉我:
我可以给你精确配置示例。