温馨提示×

Debian ulimit如何设置永久

小樊
37
2026-07-12 00:14:46
栏目: 智能运维

在 Debian(及其他 Linux 系统)中,ulimit 本身只是 shell 的内置命令,不能“永久”生效。要永久修改资源限制,需要通过 PAM + limits.confsystemd 的方式来实现,具体取决于你希望影响的是“登录用户”还是“系统服务”。

下面分情况说明。


一、对【登录用户】永久生效(最常见)

1️⃣ 修改 /etc/security/limits.conf

这是最常用的方法。

编辑文件:

sudo vim /etc/security/limits.conf

在文件末尾添加(示例):

*               soft    nofile          65535
*               hard    nofile          65535

含义说明:

  • *:对所有用户生效(也可指定用户名)
  • soft:软限制(用户可自行修改,但不能超过 hard)
  • hard:硬限制(只有 root 可改)
  • nofile:最大打开文件数

其他常见限制类型:

nproc     最大进程数
stack     栈大小
memlock   内存锁定

2️⃣ 确保 PAM 启用了 limits

Debian 默认已启用,但建议确认:

grep pam_limits /etc/pam.d/common-session

如果没有,手动添加:

session required pam_limits.so

3️⃣ 重新登录生效

修改后 必须重新登录(不是 sudo,而是重新 ssh 或 tty 登录):

ulimit -n

二、对【systemd 服务】永久生效(非常重要)

如果你是给 服务(如 nginx、mysql、docker) 改 ulimit,那 limits.conf 不生效

方法 1:修改 systemd service 文件(推荐)

sudo systemctl edit 服务名

例如:

sudo systemctl edit nginx

写入:

[Service]
LimitNOFILE=65535
LimitNPROC=65535

然后:

sudo systemctl daemon-reload
sudo systemctl restart nginx

方法 2:修改 system.conf(影响所有服务)

修改:

sudo vim /etc/systemd/system.conf

添加:

DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535

然后重启系统。


三、对 root 用户的注意事项 ⚠️

Debian 默认:

root hard nofile 4096

如果只想对普通用户生效:

用户名 soft nofile 65535
用户名 hard nofile 65535

四、为什么 ulimit -a 还是老值?

常见原因:

  1. 没重新登录(su / sudo 不会读取 limits)
  2. 是 systemd 服务,不是登录用户
  3. /etc/security/limits.d/*.conf 覆盖
  4. systemd 配置没 reload

五、快速对照表

场景 正确方式
普通用户 /etc/security/limits.conf
root 登录 limits.conf + 重新登录
systemd 服务 systemctl edit
全部服务 system.conf

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

  • 用户 还是 服务
  • 想改 nofile / nproc / memlock 哪种?
  • Debian 版本(cat /etc/debian_version

我可以给你精确到命令级别的操作方案。

0