在 Debian(以及大多数 Linux 发行版) 中,ulimit 可以限制内存,但有一定范围和限制,而且只针对“当前 shell 及其子进程”。
下面分点说明:
ulimit 主要能限制以下几类内存:
ulimit -v 1048576 # 限制为 1GB(单位 KB)
Cannot allocate memory✅ 这是 ulimit 里最常用、最有效的内存限制方式
ulimit -d 524288 # 512MB
malloc / newulimit -s 8192 # 8MB
ulimit -m 524288
⚠️ 注意:
❌ 不能限制:
ulimit -v 500000
./my_program
如果是:
sudo -u otheruser ./my_program
❌ 限制不生效
需要改 service 文件:
[Service]
MemoryMax=512M
或用:
systemctl set-property xxx.service MemoryLimit=512M
如果你要真正限制内存:
docker run -m 512m
systemd-run --scope -p MemoryMax=512M ./prog
ulimit -a
✅ 能限制内存,但主要是虚拟内存(-v)
⚠️ 不是物理内存限制
❌ 不适合做系统级内存管控
✅ 服务/容器请用 systemd / cgroup / docker
如果你愿意,我可以:
直接说场景就行。