在 Debian(以及大多数 Linux 发行版)里,ulimit 本身并不能直接限制“内存使用总量”,它主要限制的是虚拟内存地址空间(address space),而不是物理内存(RSS)。
下面按常见情况说明:
ulimit -v(虚拟内存限制)ulimit -v
示例:
ulimit -v 1048576 # 限制为 1GB 虚拟内存
⚠️ 注意:
有些程序即使只用很少物理内存,也会分配大量虚拟地址(如 Java、某些数据库),容易被 ulimit -v 杀掉。
ulimit -m(常驻内存,基本不可用)ulimit -m
ulimit -s(栈大小)ulimit -s
取决于:
常见默认:
ulimit -v unlimited
ulimit -m unlimited
ulimit -s 8192 # 8MB
[Service]
MemoryMax=512M
MemoryHigh=400M
或:
systemctl set-property nginx MemoryMax=512M
memory.limit_in_bytesdocker run -m 512m ...
setrlimit(RLIMIT_AS, ...)malloc 控制Debian 的
ulimit只能限制虚拟内存(-v),不能直接限制物理内存使用量。
如果你愿意,可以告诉我:
我可以给你最合适的配置示例。