温馨提示×

Debian ulimit如何针对用户设

小樊
34
2026-08-06 23:36:31
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimitshell 内建命令,用于设置当前 shell 及其子进程的资源限制。要“针对用户设置”,常见做法有几种,按推荐程度从高到低说明。


一、推荐方式:通过 /etc/security/limits.conf(最常用)

这是 针对用户/用户组 设置 ulimit 的标准方式。

1️⃣ 编辑配置文件

sudo vim /etc/security/limits.conf

2️⃣ 添加规则

格式:

<domain> <type> <item> <value>

示例:

# 限制用户 testuser 打开文件数
testuser soft nofile 65535
testuser hard nofile 100000

# 限制用户组 dev
@dev soft nproc 4096
@dev hard nproc 8192

说明:

  • soft:软限制(用户可自行调整,但不能超过 hard)
  • hard:硬限制(只有 root 可改)
  • nofile:最大打开文件数
  • nproc:最大进程数

3️⃣ 确保 PAM 启用 limits

检查 /etc/pam.d/common-session 或登录相关文件包含:

session required pam_limits.so

通常 Debian 默认已启用。

4️⃣ 重新登录生效

su - testuser
ulimit -a

⚠️ 注意

  • systemd 服务不生效
  • 非登录 shell(如 cron)可能不生效

二、systemd 用户服务(Debian 8+)

如果你的程序是通过 systemd 启动的limits.conf 不会生效。

1️⃣ 针对 systemd 用户服务

sudo vim /etc/systemd/system.conf

添加或修改:

DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096

然后:

sudo systemctl daemon-reexec

2️⃣ 针对某个 systemd 服务

sudo systemctl edit myservice

添加:

[Service]
LimitNOFILE=65535
LimitNPROC=4096

三、在用户 shell 配置文件中设置(不推荐)

例如 ~/.bashrc~/.profile

ulimit -n 65535
ulimit -u 4096

⚠️ 问题:

  • 只对 交互式 shell 有效
  • 可能被 hard limit 限制
  • 对服务、cron、sudo 不生效

四、仅对 sudo 生效(临时方案)

sudo ulimit -n 65535

⚠️ 注意:

  • ulimit 是 shell 内建命令,sudo ulimit 通常无效
  • 正确方式:
sudo bash -c "ulimit -n 65535; your_command"

五、查看当前限制

ulimit -a
ulimit -n
ulimit -u

查看系统级最大限制:

cat /proc/sys/fs/file-max

六、推荐组合方案(生产环境)

登录用户

  • /etc/security/limits.conf

systemd 服务

  • systemctl editsystem.conf

容器 / Docker

  • 在 Docker rundocker-compose 中设置

七、常见问题

Q1:Debian 为什么 limits.conf 不生效?

  • 没重新登录
  • 使用 systemd 启动
  • PAM 没有加载 pam_limits.so

Q2:root 用户是否受 limits.conf 限制?

  • 默认 不受
  • 若需要限制 root,需显式写 root

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

  • 普通用户 / root / 服务
  • ssh 登录 / Docker / systemd
  • 想限制 nofile / nproc / 内存 / 其他

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

0