在 Debian(以及其它 Linux 发行版)中,ulimit 用于限制单个用户或进程所能使用的系统资源,防止某个程序或用户耗尽系统资源,从而影响系统稳定性。
下面从作用、常见限制项、使用方式、生效范围几个方面说明。
ulimit 主要作用是:
常用 ulimit 参数(通过 ulimit -a 查看):
| 参数 | 含义 | 常见问题 |
|---|---|---|
-n |
打开文件描述符数量 | Too many open files |
-u |
最大用户进程数 | fork: retry |
-m |
最大内存(常不生效) | — |
-v |
虚拟内存限制 | OOM |
-s |
栈大小 | 栈溢出 |
-c |
core 文件大小 | 调试用 |
-f |
最大文件大小 | 写文件失败 |
-t |
CPU 时间 | 超时退出 |
-d |
数据段大小 | — |
示例:
ulimit -n
ulimit -u
ulimit -a
ulimit -n 65536
ulimit -u 4096
⚠️ 只对当前 shell 及其子进程有效,重启失效。
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例:
* soft nofile 65536
* hard nofile 65536
www-data soft nproc 4096
说明:
soft:警告值hard:硬性上限Debian 使用 systemd 后,limits.conf 对服务可能不生效
需修改 service 文件:
[Service]
LimitNOFILE=65536
LimitNPROC=4096
然后:
systemctl daemon-reload
systemctl restart xxx
| 项目 | 说明 |
|---|---|
| ulimit | 用户/进程级 |
/proc/sys/fs/file-max |
系统级最大文件数 |
| cgroup | 容器/服务级 |
nofilenofile / nprocnproc 影响❌ ulimit 能限制所有进程
✅ 只对新启动的进程生效
❌ 修改 limits.conf 一定生效
✅ 需 PAM / systemd 支持
❌ root 不受限制
✅ root 也受 hard limit 限制
如果你愿意,我可以:
你更关心哪一块?