1️⃣ 目的
限制 python3 进程的 内存和 CPU 资源,防止占用过多系统资源,避免影响其他进程。
2️⃣ 实现方式
使用 systemd-run 运行 python3 进程,并设置 内存最大限制 和 CPU 使用率上限。
3️⃣ 配置步骤
1. 设置 alias,使进程限制永久生效
echo "alias python3='systemd-run --scope -p MemoryMax=2G -p CPUQuota=70% /usr/bin/python3'" >> ~/.bashrc
source ~/.bashrc
说明:
MemoryMax=2G限制 Python 进程最多使用 2GB 内存。
CPUQuota=70%限制 Python 进程最多使用 70% CPU。配置写入
~/.bashrc,下次 SSH 连接时自动生效。
2. 测试 Python 进程的资源限制
2.1 内存超限测试(2GB 限制)
python3 -c "x = ' ' * 2500 * 1024 * 1024; import time; time.sleep(10)"
预期结果:
-
由于 Python 进程尝试分配 2.5GB 内存,超出
MemoryMax=2G限制,进程会被 Killed。 -
使用
dmesg查看 OOM 事件:dmesg | grep -i "oom"
示例日志:
[12006177.834479] oom-kill:constraint=CONSTRAINT_MEMCG,task=python3,pid=3157969,uid=0
[12006177.834492] Memory cgroup out of memory: Killed process 3157969 (python3)
2.2 CPU 限制测试(70% 限制)
运行高 CPU 占用任务:
python3 -c "while True: pass"
在另一个终端检查 CPU 使用情况:
top -p $(pgrep -n python3)
预期结果:
- Python 进程的 CPU 占用 不会超过 70%。
3. 监控 systemd-run 进程状态
3.1 查看当前运行的 Python 进程
systemctl list-units --user | grep run-
3.2 检查 Python 进程是否因 OOM 被杀死
journalctl --user -xe | grep "Killed"
4️⃣ 总结
✅ 现在,Python 进程的资源使用受 systemd-run 机制限制,避免超限导致服务器崩溃! 🚀
优势:
✅ 自动生效(重启 SSH 仍然有效)。
✅ 无需手动管理 cgroup,更易维护。
✅ 灵活修改 限制,只需调整
alias参数。