温馨提示×

linux如何限制进程资源

小樊
61
2026-08-20 13:13:34
栏目: 智能运维

在 Linux 中限制进程资源,常见且实用的方法主要有以下几种,按使用场景从常用到高级给你系统梳理一下:


一、使用 ulimit(最常用,针对 shell 会话)

1️⃣ 查看当前限制

ulimit -a

2️⃣ 常见限制项

资源 说明
-n 最大文件描述符
-u 最大进程数
-m 最大内存(RSS,部分系统无效)
-v 虚拟内存
-t CPU 时间(秒)
-f 最大文件大小

3️⃣ 临时设置(仅当前 shell)

ulimit -n 65535
ulimit -u 4096
ulimit -v 1048576   # KB

⚠️ 注意

  • ulimit 只对当前 shell 及其子进程生效
  • 非 root 用户只能调小,不能调大

4️⃣ 永久生效(用户级)

编辑:

/etc/security/limits.conf
*    soft    nofile    65535
*    hard    nofile    65535
*    soft    nproc     4096
*    hard    nproc     4096

需要 PAM 支持(通常默认开启)


二、使用 systemd(推荐,服务进程)

1️⃣ 服务级资源限制

# /etc/systemd/system/xxx.service
[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=200

然后:

systemctl daemon-reexec
systemctl restart xxx

2️⃣ 查看限制

systemctl show xxx | grep -E "Memory|CPU|Tasks"

适合:

  • 后台服务
  • 容器、守护进程

三、使用 cgroups(最底层、最强大)

1️⃣ cgroups v1(传统)

mkdir /sys/fs/cgroup/memory/myapp
echo 512M > /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
echo $$ > /sys/fs/cgroup/memory/myapp/cgroup.procs

2️⃣ cgroups v2(现代)

mkdir /sys/fs/cgroup/myapp
echo "max 512M" > /sys/fs/cgroup/myapp/memory.max
echo $$ > /sys/fs/cgroup/myapp/cgroup.procs

适合:

  • 容器(Docker / Kubernetes)
  • 精细资源控制

四、使用 nice / cpulimit(CPU 限制)

1️⃣ nice(优先级)

nice -n 10 ./app

2️⃣ cpulimit(CPU 使用率)

cpulimit -l 50 ./app

⚠️ cpulimit 不是真正限制,而是“压制”


五、使用 Docker(容器级)

docker run -m 512m --cpus=1.5 myimage

底层仍是 cgroups


六、常见场景推荐方案

场景 推荐方式
临时测试 ulimit
登录用户 limits.conf
系统服务 systemd
容器 cgroups / Docker
精细控制 cgroups

七、快速示例:限制某个进程最多 512MB 内存

✅ systemd 方式

MemoryMax=512M

✅ cgroup 方式

mkdir /sys/fs/cgroup/myapp
echo 512M > /sys/fs/cgroup/myapp/memory.max

如果你愿意,我可以:

  • ✅ 给你具体命令(比如只限制某个 PID)
  • ✅ 讲 ulimit vs cgroup 区别
  • ✅ 帮你排查 OOM / 进程异常退出

你可以直接说使用场景,比如:“我想限制 Python 脚本内存”

0