在 Debian 系统中,限制进程资源有多种方式,取决于你是临时限制某个命令、限制系统服务,还是限制用户/组。下面按常见场景说明。
ulimit(当前 shell / 登录用户)ulimit -a
ulimit -u 100 # 最大进程数
ulimit -n 1024 # 最大文件描述符
ulimit -m 512000 # 最大内存(KB,部分系统不生效)
ulimit -t 60 # CPU 时间(秒)
ulimit -f 10000 # 文件大小(KB)
⚠️ 只对当前 shell 及其子进程有效。
编辑:
/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+)systemctl edit nginx
[Service]
MemoryMax=512M
CPUQuota=50%
TasksMax=200
LimitNOFILE=4096
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(高级)cgcreate -g memory:/mygroup
echo 512M > /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
cgexec -g memory:mygroup ./app
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 |
如果你能说明:
我可以给你精确配置示例。