温馨提示×

怎样限制linux进程资源

小樊
45
2026-09-09 13:24:54
栏目: 智能运维

在 Linux 中限制进程资源,常见做法有 cgroups、ulimit、systemd 资源控制、nice/CPU 亲和性、容器 等。下面按“常用程度 + 场景”系统说明。


一、ulimit(最常用,限制“当前 shell 及子进程”)

查看限制

ulimit -a

常见限制项

  • 最大打开文件数:-n
  • 最大进程数:-u
  • 核心文件大小:-c
  • 最大内存(RSS):-m(很多系统不生效)
  • CPU 时间:-t

示例

# 限制最多 1024 个文件
ulimit -n 1024

# 限制最多 512 个进程
ulimit -u 512

# 限制 CPU 使用时间 60 秒
ulimit -t 60

# 禁止生成 core 文件
ulimit -c 0

⚠️ 只对当前 shell 及其子进程有效,重启失效。


二、systemd 服务级资源限制(推荐用于服务)

示例(/etc/systemd/system/myapp.service)

[Service]
ExecStart=/usr/bin/myapp
MemoryMax=512M
CPUQuota=50%
TasksMax=200
LimitNOFILE=1024

常用字段

  • MemoryMax:最大内存
  • CPUQuota:CPU 百分比(如 50% = 半个核)
  • TasksMax:最大线程/进程数
  • LimitNOFILE:文件描述符
  • IOWeight:磁盘 IO 权重
systemctl daemon-reload
systemctl restart myapp

✅ 稳定、持久、生产推荐


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

cgroups v1 示例

mkdir /sys/fs/cgroup/cpu/mygroup
echo 50000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
echo <pid> > /sys/fs/cgroup/cpu/mygroup/tasks

cgroups v2(现代系统)

mkdir /sys/fs/cgroup/mygroup
echo "50000 100000" > /sys/fs/cgroup/mygroup/cpu.max
echo <pid> > /sys/fs/cgroup/mygroup/cgroup.procs

适合:

  • 多租户
  • 容器底层
  • 精细控制 CPU / 内存 / IO

四、nice & CPU 亲和性(轻量调度)

降低优先级

nice -n 10 ./app
renice -n 10 -p <pid>

绑定 CPU

taskset -c 0,1 ./app
taskset -cp 0,1 <pid>

五、使用容器(Docker 等)

docker run \
  --memory=512m \
  --cpus=1.5 \
  --pids-limit=200 \
  myimage

✅ 最省心,底层仍是 cgroups


六、按“目标”快速选型

目标 推荐方式
临时限制命令 ulimit
后台服务 systemd
多进程统一限制 cgroups
降低优先级 nice
绑定 CPU taskset
隔离环境 Docker

如果你能说明:

  • 临时命令还是服务
  • 想限制 CPU / 内存 / 文件数 / 进程数
  • 使用的是 CentOS / Ubuntu / 容器

我可以给你一份可直接用的配置

0