温馨提示×

debian ulimit内存限制多少

小樊
46
2026-09-25 05:58:41
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)里,ulimit 本身并不能直接限制“内存使用总量”,它主要限制的是虚拟内存地址空间(address space),而不是物理内存(RSS)。

下面按常见情况说明:


1. ulimit -v(虚拟内存限制)

ulimit -v
  • 单位:KB
  • 限制的是 虚拟内存(VSZ)
  • 包括:
    • 代码
    • 堆
    • 栈
    • mmap 映射
  • 不是物理内存(RSS)

示例:

ulimit -v 1048576   # 限制为 1GB 虚拟内存

⚠️ 注意:
有些程序即使只用很少物理内存,也会分配大量虚拟地址(如 Java、某些数据库),容易被 ulimit -v 杀掉。


2. ulimit -m(常驻内存,基本不可用)

ulimit -m
  • 理论上限制 RSS(物理内存)
  • ❌ 实际上 Linux 已忽略此限制
  • 设置通常无效

3. ulimit -s(栈大小)

ulimit -s
  • 单位:KB
  • 限制线程/进程的栈大小
  • 对多线程程序很重要

4. Debian 默认值是多少?

取决于:

  • 登录方式(SSH / systemd / cron)
  • PAM 配置
  • systemd 服务配置

常见默认:

ulimit -v unlimited
ulimit -m unlimited
ulimit -s 8192   # 8MB

5. 真正限制“内存用量”的正确方式

✅ systemd 服务(推荐)

[Service]
MemoryMax=512M
MemoryHigh=400M

或:

systemctl set-property nginx MemoryMax=512M

✅ cgroup(容器 / 服务器)

  • memory.limit_in_bytes
  • Docker:
docker run -m 512m ...

✅ 编程级

  • setrlimit(RLIMIT_AS, ...)
  • malloc 控制

6. 总结一句话

Debian 的 ulimit 只能限制虚拟内存(-v),不能直接限制物理内存使用量。

如果你愿意,可以告诉我:

  • 你是 限制用户?进程?服务?容器?
  • 想限制 物理内存还是虚拟内存?

我可以给你最合适的配置示例。

0 踩