Python3 进程资源限制(systemd-run 方案)

272 阅读1分钟

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 参数。