在 Debian(以及大多数 Linux 发行版)里,ulimit 相关配置通常来自 shell 限制 和 系统/服务限制(PAM + systemd) 两部分。下面按常见场景说明怎么查。
ulimit -a
示例输出:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31234
virtual memory (kbytes, -v) unlimited
ulimit -n # 打开文件数
ulimit -u # 最大进程数
ulimit -s # 栈大小
注意:
ulimit只显示当前 shell 会话的限制- 非 root 用户只能调小,不能调大
/etc/security/limits.conf这是最常见的用户级限制配置文件:
cat /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
www-data soft nproc 4096
字段含义:
用户/组 soft/hard 资源类型 值
/etc/security/limits.d/*.confDebian 通常会加载该目录下的配置:
ls /etc/security/limits.d/
cat /etc/security/limits.d/*.conf
limits.conf 只有通过 PAM 才会生效。
检查是否有这一行:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
应该有:
session required pam_limits.so
⚠️ 如果是 systemd 服务,limits.conf 可能不生效
systemctl show nginx | grep Limit
示例:
LimitNOFILE=65535
LimitNPROC=512
/etc/systemd/system.conf
/etc/systemd/user.conf
相关项:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096
修改后需:
systemctl daemon-reexec
cat /proc/<PID>/limits
例如:
cat /proc/$(pgrep nginx | head -1)/limits
| 场景 | 是否生效 |
|---|---|
| SSH 登录用户 | limits.conf ✅ |
| su 切换用户 | 需 pam_limits ✅ |
| systemd 服务 | limits.conf ❌(看 systemd) |
| docker 容器 | 看宿主机 + docker 配置 |
如果你愿意,可以告诉我:
我可以给你更精确的命令。