温馨提示×

怎么限制debian进程资源

小樊
47
2026-09-13 17:46:45
栏目: 智能运维

在 Debian 系统中,限制进程资源有多种方式,取决于你是临时限制某个命令、限制系统服务,还是限制用户/组。下面按常见场景说明。


一、使用 ulimit(当前 shell / 登录用户)

1. 查看当前限制

ulimit -a

2. 临时限制(仅当前 shell)

ulimit -u 100        # 最大进程数
ulimit -n 1024       # 最大文件描述符
ulimit -m 512000     # 最大内存(KB,部分系统不生效)
ulimit -t 60         # CPU 时间(秒)
ulimit -f 10000      # 文件大小(KB)

⚠️ 只对当前 shell 及其子进程有效。

3. 对用户永久限制(PAM)

编辑:

/etc/security/limits.conf

示例:

www-data soft nproc 200
www-data hard nproc 300
www-data soft nofile 4096

并确保:

/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive

包含:

session required pam_limits.so

二、使用 systemd 限制服务(推荐,Debian 9+)

1. 编辑服务

systemctl edit nginx

2. 添加资源限制

[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=200
LimitNOFILE=4096

3. 生效

systemctl daemon-reload
systemctl restart nginx

常用字段

项目 示例
内存 MemoryMax=1G
CPU CPUQuota=80%
进程数 TasksMax=100
文件句柄 LimitNOFILE=65535

✅ 这是最稳定、最推荐的方式。


三、使用 systemd-run 临时限制命令

systemd-run \
  --scope \
  -p MemoryMax=256M \
  -p CPUQuota=50% \
  ./my_program

适合临时运行程序。


四、使用 cgroups(高级)

1. v1(传统)

cgcreate -g memory:/mygroup
echo 512M > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
cgexec -g memory:mygroup ./app

2. v2(现代)

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

⚠️ 一般用户不需要直接用 cgroup。


五、使用 cpulimit(限制 CPU 占用)

cpulimit -p 1234 -l 30

或:

cpulimit -e nginx -l 40

⚠️ 不是硬限制,只是降速。


六、使用 nice / ionice(优先级)

nice -n 10 ./app
ionice -c 2 -n 7 ./app

不限制资源,只影响调度优先级。


七、推荐方案总结

场景 推荐
限制系统服务 ✅ systemd
限制某次命令 systemd-run
限制用户 limits.conf
临时 CPU cpulimit
精细控制 cgroups

如果你能说明:

  • 是服务 / 脚本 / 用户
  • 想限制 CPU / 内存 / 进程数 / 文件数

我可以给你精确配置示例。

0 踩