在 Debian 里排查 ulimit 相关问题,通常分**“是什么限制了”、“在哪里设置的”、“为什么没生效”**三步。下面给你一套实用排查思路。
ulimit -a
常见重点:
-n 文件描述符(open files)-u 最大进程数(max user processes)-c core 文件大小-s 栈大小ulimit -n
ulimit -u
cat /proc/sys/fs/file-max
sysctl fs.file-max
cat /proc/<pid>/limits
例如 Nginx / Java 进程异常:
pidof nginx
cat /proc/$(pidof nginx)/limits
很多时候 ulimit 改了,但进程没重启,限制还是老的。
/etc/security/limits.conf最常见位置:
cat /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
www-data soft nproc 1024
⚠️ 注意:
systemd 启动的服务 不一定生效/etc/security/limits.d/*.conf优先级高于 limits.conf:
ls /etc/security/limits.d/
cat /etc/security/limits.d/*.conf
如果你的问题是 服务起不来 / 文件描述符不够:
systemctl show <service> | grep -i limit
例如:
systemctl show nginx | grep Limit
在 service 文件里加:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
systemctl daemon-reload
systemctl restart nginx
~/.bashrc
~/.profile
/etc/profile
例如:
ulimit -n 65535
⚠️ 只对交互 shell有效,对服务没用。
✅ 检查:
dmesg | grep -i "file descriptor"
检查:
ulimit -n
/proc/<pid>/limits
ulimit -u
cat /proc/<pid>/limits | grep processes
# 当前限制
ulimit -a
# 进程实际限制
cat /proc/$(pidof 服务名)/limits
# PAM 配置
cat /etc/security/limits.conf
ls /etc/security/limits.d/
# systemd
systemctl show 服务名 | grep Limit
# 系统级
sysctl fs.file-max
如果你愿意,可以告诉我:
cat /etc/debian_version)我可以帮你精准定位是哪一层在限制。