温馨提示×

centos ulimit能否永久生效

小樊
43
2026-09-30 05:42:18
栏目: 智能运维

在 CentOS(以及大多数 Linux 发行版)中,ulimit 可以“永久生效”,但不是通过一条命令直接永久生效,而是需要写配置文件,并且“永久”的范围要分清楚。

下面分情况说明:


一、ulimit 为什么不是“直接永久”

ulimit 是 shell / 进程级别 的限制:

  • 当前 shell 执行 ulimit -n 65535
  • 只对当前 shell 及其子进程有效
  • 注销或重启后失效

所以:

❌ ulimit 本身不能“永久” ✅ 需要通过配置文件或 systemd 来“每次启动自动设置”


二、用户登录会话永久生效(最常用)

方法 1:/etc/security/limits.conf

适用于:

  • 普通用户
  • SSH 登录
  • 本地登录
vim /etc/security/limits.conf

示例:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

说明:

  • * 表示所有用户(也可写用户名)
  • soft:警告值
  • hard:最大值
  • nofile:打开文件数
  • nproc:进程数

⚠️ 注意:

  • 需要 PAM 支持
  • CentOS 默认已启用(/etc/pam.d/login 中有 pam_limits.so)

✅ 重新登录后生效:

ulimit -n

方法 2:/etc/security/limits.d/*.conf

CentOS 推荐方式(避免改主文件):

vim /etc/security/limits.d/20-nofile.conf

内容同上。


三、systemd 服务永久生效(重点)

如果你是 CentOS 7+,并且程序是:

  • nginx
  • mysql
  • 自定义 systemd 服务

那么 limits.conf 可能不生效!

正确方式:改 systemd 配置

1️⃣ 服务级配置

vim /usr/lib/systemd/system/nginx.service

在 [Service] 下加:

LimitNOFILE=65535
LimitNPROC=65535

然后:

systemctl daemon-reload
systemctl restart nginx

2️⃣ 全局 systemd 默认(不推荐滥用)

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* 参数(服务)

实现“永久生效”

如果你愿意,可以告诉我:

  • CentOS 版本(6 / 7 / 8 / Stream)
  • 想限制什么(文件数 / 进程数 / 内存)
  • 是用户还是服务

我可以给你精确配置示例。

0 踩