温馨提示×

debian ulimit内存限制如何设

小樊
51
2026-09-28 04:18:42
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 本身不能直接限制进程占用内存的总量(如 RSS 或虚拟内存上限的精细控制),它主要限制的是:

  • 最大虚拟内存地址空间(-v)
  • 最大文件大小(-f)
  • 最大进程数(-u)
  • 最大打开文件数(-n)
  • core 文件大小(-c)

下面分场景说明 Debian 下如何设置内存相关的 ulimit。


一、临时设置(当前 shell 生效)

ulimit -v 1048576   # 限制虚拟内存为 1GB(单位 KB)

查看当前限制:

ulimit -a

⚠️ 注意:-v 是 虚拟内存(VSZ),不是物理内存(RSS)
很多程序会因 VSZ 过大直接无法启动


二、对某个用户永久生效(推荐)

1. 修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

示例(限制用户 appuser):

appuser soft as  1048576
appuser hard as  2097152

说明:

  • as = address space(虚拟内存,KB)
  • soft:警告值
  • hard:硬限制

2. 确保 PAM 启用 limits

检查:

grep pam_limits /etc/pam.d/common-session

应包含:

session required pam_limits.so

修改后 重新登录 才生效


三、对 systemd 服务限制内存(更精确)

如果你是用 systemd 管理服务,ulimit 基本没用,要用:

[Service]
MemoryMax=512M
MemoryHigh=400M

示例:

sudo systemctl edit myapp.service
[Service]
MemoryMax=512M

然后:

sudo systemctl daemon-reload
sudo systemctl restart myapp

✅ 这是 推荐方式,可限制 物理内存(RSS)


四、限制“物理内存”的替代方案

ulimit 不能精确限制 RSS,可选方案:

1. cgroups(最专业)

systemd-run --scope -p MemoryMax=512M ./myapp

2. Docker

docker run -m 512m myimage

五、常见误区

❌ 用 ulimit -m 限制物理内存
✅ 实际上 -m 在大多数系统已 被忽略


六、总结建议

需求 推荐方式
限制虚拟内存 ulimit -v
限制用户资源 /etc/security/limits.conf
限制服务内存 systemd MemoryMax
精确内存控制 cgroups / Docker

如果你能说明:

  • 是 用户程序 还是 服务
  • 想限制 虚拟内存还是物理内存
  • Debian 版本

我可以给你更精确的配置示例。

0 踩