温馨提示×

linux进程如何限制资源

小樊
59
2026-09-15 17:07:34
栏目: 智能运维

在 Linux 中,限制进程资源通常有几种层级和工具,从“临时跑一个命令”到“长期服务管理”都有对应方案。下面按常见场景系统说明。


一、命令行临时限制(最常用)

1. ulimit(shell 级限制)

限制当前 shell 及其子进程的资源。

ulimit -a        # 查看所有限制
ulimit -u 100    # 最大用户进程数
ulimit -n 1024   # 最大打开文件数
ulimit -v 500000 # 最大虚拟内存(KB)
ulimit -t 60     # CPU 时间(秒)
ulimit -f 10000  # 文件大小(KB)

⚠️ 注意:

  • 只对当前 shell 生效
  • 非 root 不能调大
  • 不适合长期服务

2. nice / renice(CPU 优先级)

控制CPU 调度优先级,不是硬限制。

nice -n 10 ./app
renice -n 5 -p 1234
  • -20 最高优先级
  • 19 最低

3. timeout(时间限制)

限制进程运行时间。

timeout 30s ./app

超时后默认发送 SIGTERM,可指定信号:

timeout -s KILL 10s ./app

二、Cgroups(系统级、最强大)

1. cgroups v1 / v2(推荐)

用于限制 CPU、内存、IO

简单示例(cgroups v2)

mkdir /sys/fs/cgroup/mygroup
echo 500000 > /sys/fs/cgroup/mygroup/cpu.max   # 0.5 CPU
echo 200M > /sys/fs/cgroup/mygroup/memory.max
echo 1234 > /sys/fs/cgroup/mygroup/cgroup.procs

✅ 适合:

  • 服务
  • 容器
  • 多租户

三、systemd 服务限制(生产推荐)

如果你用 systemd 管理服务:

[Service]
MemoryMax=200M
CPUQuota=50%
TasksMax=100
LimitNOFILE=1024

然后:

systemctl daemon-reload
systemctl restart myapp

✅ 最稳定、最常用


四、容器方式(最强隔离)

Docker 示例

docker run \
  --memory=200m \
  --cpus=0.5 \
  --pids-limit=100 \
  myimage

✅ 适合:

  • 微服务
  • 多应用隔离

五、编程级限制(开发视角)

C / Python 示例

#include <sys/resource.h>
setrlimit(RLIMIT_CPU, &(struct rlimit){10, 10});

Python:

import resource
resource.setrlimit(resource.RLIMIT_CPU, (10, 10))

六、选择建议

场景 推荐方式
临时命令 ulimit / timeout
长期服务 systemd
强隔离 cgroups / Docker
开发控制 setrlimit

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

  • 是 CPU / 内存 / 文件数 / 进程数 哪一种?
  • 是 命令行程序 还是 系统服务?
  • 用的是 CentOS / Ubuntu / 容器?

我可以直接给你可复制的配置。

0 踩