Linux进程资源限制配置指南
一 概览与适用场景
二 快速上手 ulimit 与 limits.conf
ulimit -aulimit -n 65535(打开文件数)、ulimit -u 4096(用户进程数)<domain> <type> <item> <value>* soft nofile 65535
* hard nofile 131070
nginx soft nofile 65535
nginx hard nofile 65535
/etc/pam.d/common-session、/etc/pam.d/login、/etc/pam.d/sshd 中包含 session required pam_limits.so[Service] 中设置:LimitNOFILE=65535、LimitNPROC=4096 等systemctl daemon-reload && systemctl restart <service>ulimit -a 或 cat /proc/<PID>/limits三 使用 cgroups 进行硬限制 CPU 与内存
mount | grep cgroup,确认 cpu、memory 等子系统已挂载(以下示例为 cgroups v1)sudo mkdir -p /sys/fs/cgroup/memory/myapp
echo 104857600 | sudo tee /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
your_cmd &
echo $! | sudo tee /sys/fs/cgroup/memory/myapp/tasks
# 监控
cat /sys/fs/cgroup/memory/myapp/memory.usage_in_bytes
sudo mkdir -p /sys/fs/cgroup/cpu/myapp
echo 100000 | sudo tee /sys/fs/cgroup/cpu/myapp/cpu.cfs_period_us
echo 50000 | sudo tee /sys/fs/cgroup/cpu/myapp/cpu.cfs_quota_us
echo $! | sudo tee /sys/fs/cgroup/cpu/myapp/tasks
# 监控
cat /sys/fs/cgroup/cpu/myapp/cpu.stat
systemd-run --scope -p MemoryLimit=100M -p CPUQuota=50% your_command
四 常用命令与验证
ulimit -a、ulimit -n/ulimit -Hn(软/硬)、ulimit -ucat /proc/<PID>/limitscat /proc/sys/fs/file-max、cat /proc/sys/fs/nr_opencat /sys/fs/cgroup/memory/<group>/memory.usage_in_bytescat /sys/fs/cgroup/cpu/<group>/cpu.statnice -n 10 your_cmdrenice -n 10 -p <PID>五 配置要点与排错清单
Limit* 为准,需 daemon-reload 与重启session required pam_limits.soulimit -a、/proc/<PID>/limitsmemory.usage_in_bytes、cpu.stat/proc/sys/fs/file-nr、/proc/sys/fs/file-max