在 Linux 下限制进程资源使用,常见手段有 ulimit、cgroups、systemd、容器、nice/ionice 等,下面按使用场景系统说明。
限制当前 shell 及其子进程的资源。
ulimit -a # 查看当前限制
ulimit -u 1000 # 最大进程数
ulimit -n 65535 # 最大文件描述符
ulimit -v 1048576 # 最大虚拟内存(KB)
ulimit -m 524288 # 最大物理内存(KB)
ulimit -t 300 # CPU 时间(秒)
ulimit -f 100000 # 最大文件大小(KB)
⚠️ 注意:
-m)在现代 glibc 下可能不完全生效nice -n 10 ./app # 降低优先级(19 最低)
renice -n 5 -p 1234 # 调整已有进程
ionice -c 2 -n 7 ./app # 空闲 IO
# 创建 cgroup
mkdir /sys/fs/cgroup/mytest
# 限制内存 512MB
echo 536870912 > /sys/fs/cgroup/mytest/memory.limit_in_bytes
# 限制 CPU(50%)
echo 50000 > /sys/fs/cgroup/mytest/cpu.cfs_quota_us
echo 100000 > /sys/fs/cgroup/mytest/cpu.cfs_period_us
# 添加进程
echo $$ > /sys/fs/cgroup/mytest/cgroup.procs
✅ 适合:
# /etc/systemd/system/myservice.service
[Service]
MemoryMax=512M
CPUQuota=50%
IOWeight=100
TasksMax=200
systemctl daemon-reload
systemctl restart myservice
✅ 优点:
docker run \
--memory=512m \
--cpus=1.5 \
--pids-limit=100 \
myimage
✅ 适合:
| 资源 | 推荐方式 |
|---|---|
| CPU 时间 | ulimit -t / cgroups / systemd |
| CPU 优先级 | nice / cgroups |
| 内存 | cgroups / systemd / Docker |
| 进程数 | ulimit -u / TasksMax |
| 文件数 | ulimit -n |
| IO | ionice / cgroups |
| 网络 | cgroups / tc / iptables |
ulimit + nicesystemd + cgroupsDocker / Kubernetes如果你愿意,可以告诉我:
我可以给你一份 可直接用的配置模板。