在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制 shell 进程及其子进程可使用的系统资源。针对某个用户设置 ulimit,常见做法有以下几种(按推荐顺序):
/etc/security/limits.conf(最常用 ✅)这是 针对用户或用户组 设置 ulimit 的标准方式。
sudo nano /etc/security/limits.conf
格式:
<domain> <type> <item> <value>
示例:为用户 alice 设置最大打开文件数
alice soft nofile 65536
alice hard nofile 131072
示例:为用户组 dev
@dev soft nproc 4096
@dev hard nproc 8192
| item | 含义 |
|---|---|
| nofile | 最大打开文件数 |
| nproc | 最大进程数 |
| stack | 栈大小 |
| memlock | 锁定内存 |
| core | core dump 大小 |
⚠️ 注意:
root 用户默认不生效,需额外配置limits.conf 依赖 PAM,否则不会生效。
grep pam_limits /etc/pam.d/common-session
如果没有,添加:
session required pam_limits.so
如果你是为 systemd 管理的服务 设置 ulimit,需要用 systemd 的方式。
mkdir -p ~/.config/systemd/user/
nano ~/.config/systemd/user/limits.conf
[Service]
LimitNOFILE=65536
LimitNPROC=4096
然后:
systemctl --user daemon-reexec
sudo systemctl edit myservice
[Service]
LimitNOFILE=65536
例如 ~/.bashrc 或 ~/.profile:
ulimit -n 65536
ulimit -u 4096
⚠️ 问题:
ulimit -a
ulimit -n
ulimit -u
cat /proc/$(id -u)/limits
| 问题 | 原因 |
|---|---|
| limits.conf 不生效 | PAM 未启用 |
| root 不生效 | root 默认不受限 |
| systemd 服务不生效 | 没用 systemd Limit |
| sudo 后不生效 | sudo 会重置环境 |
| 场景 | 推荐方式 |
|---|---|
| 普通用户 | /etc/security/limits.conf |
| 用户组 | /etc/security/limits.conf |
| systemd 服务 | systemctl edit |
| 临时测试 | ulimit 命令 |
如果你能说明 具体用户 / 服务 / 资源类型(nofile / nproc 等),我可以给你一份精确配置示例。