温馨提示×

debian ulimit能否永久设置

小樊
47
2026-09-03 20:20:14
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 可以“永久”设置,但不是通过 ulimit 命令本身永久生效,因为 ulimit 只在当前 shell 及其子进程中有效。

下面按使用场景说明如何正确“永久”设置。


一、用户级永久设置(最常用)

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

适用于 登录用户(PAM 会话)

编辑:

sudo vim /etc/security/limits.conf

示例(永久限制某用户):

username soft nofile 65535
username hard nofile 65535

或对所有用户:

* soft nofile 65535
* hard nofile 65535

⚠️ 注意:

  • 需要 重新登录 才生效
  • systemd 服务不生效
  • 依赖 PAM(pam_limits.so

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

推荐方式(优于直接改 limits.conf)

sudo vim /etc/security/limits.d/99-custom.conf

内容同上。


二、系统级 / systemd 服务永久设置(非常重要)

systemd 服务(如 nginx、java、docker)

limits.conf 不会生效

要在 service 文件中设置:

[Service]
LimitNOFILE=65535
LimitNPROC=4096

然后:

sudo systemctl daemon-reload
sudo systemctl restart xxx

三、系统全局(内核级)参数

某些限制不是 ulimit 能控制的,例如:

fs.file-max = 1000000

设置方式:

sudo vim /etc/sysctl.conf
fs.file-max = 1000000

生效:

sudo sysctl -p

四、开机自动执行 ulimit(不推荐)

你可以在:

~/.bashrc
/etc/profile

里写:

ulimit -n 65535

❌ 缺点:

  • 只对交互 shell 有效
  • 对服务无效
  • 容易和环境冲突

五、总结

场景 正确方式
登录用户 /etc/security/limits.conf
systemd 服务 service 文件 LimitXxx
内核级 /etc/sysctl.conf
临时测试 ulimit 命令

如果你能告诉我:

  • 用户进程 还是 服务
  • 具体想限制什么(nofile / nproc / stack / core)

我可以给你精确可用的配置示例

0