python程序对服务器cpu和内存资源占用的管理。

背景

在服务器上部署了一套目标检测的程序,做成while true 的轮询检测数据更新的定时任务。

结果没想到那台服务器还有一套可视化程序要给领导演示看,结果演示的时候平台各种报错。

然后通过top查看了一下资源利用率发现python的程序cpu 130。(其他机器上我看都是100 ,这个服务器不知道为啥是130左右超频么?)

所以寻思给程序加个资源占用的限制,跑慢一点没关系。思路为代码中加限制或者操作系统层面加限制。

代码中设置适用于需要更细粒度的控制,并且不依赖于操作系统特性的情况。

服务器上设置则更适合于生产环境,因为它利用了操作系统提供的资源管理工具,更加灵活和强大。

记录一下解决方案。各位可测试使用。

一 限制cpu使用

1.使用os.nice()函数来调整进程的优先级。例如,将优先级设置为较低的值可以降低进程的CPU占用率

python 复制代码
import os
os.nice(10)  # 将优先级设置为10(范围是-20到19,默认为0)

2.使用psutil库来监控和限制CPU使用率。

python 复制代码
import psutil
import time

p = psutil.Process()
while True:
    cpu_usage = p.cpu_percent(interval=1)
    if cpu_usage > 50:  # 如果CPU使用率超过50%
        time.sleep(1)  # 暂停1秒

二 限制内存使用

使用resource模块来限制内存使用。

python 复制代码
import resource

def limit_memory(maxsize):
    soft, hard = resource.getrlimit(resource.RLIMIT_AS)
    resource.setrlimit(resource.RLIMIT_AS, (maxsize, hard))

limit_memory(500 * 1024 * 1024)  # 限制最大内存使用为500MB

三 在服务器上设置

使用cgroups:

cgroups(控制组)是一种Linux内核功能,用于限制、记录和隔离进程组的资源使用(如CPU、内存、磁盘I/O等)。

创建一个新的cgroup并设置资源限制。

bash 复制代码
sudo cgcreate -g memory,cpu:mygroup
echo "500M" | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
echo "50" | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.shares

将你的Python进程添加到这个cgroup中。

bash 复制代码
sudo cgclassify -g memory,cpu:mygroup <pid>

docker 容器限制

bash 复制代码
docker run --memory="500m" --cpus="0.5" my_python_app

使用systemd服务文件:

如果你的Python程序是通过systemd管理的,可以在服务文件中设置资源限制。

bash 复制代码
[Service]
ExecStart=/usr/bin/python3 /path/to/your_script.py
MemoryLimit=500M
CPUQuota=50%
相关推荐
Highcharts.js9 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
爱昏羔10 小时前
下篇:从检索到交互 — 物流RAG问答系统与WebUI全实现
python·langchain·agent
_Jimmy_10 小时前
Agent引用数据库知识过时的增量同步方案
人工智能·python·langchain
头发还在的女程序员11 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
min(a,b)11 小时前
学习第 4 天:面向对象与异常处理
python·学习·学习方法
爱写代码的小朋友13 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
yangshicong13 小时前
第19章:AI安全防护与AI安全
人工智能·python·安全·prompt·ai编程
果汁华13 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
c_lb728813 小时前
2026年不同基础做量化,先找AI能参与的位置
人工智能·python
小小晓.13 小时前
C++:语句和作用域
开发语言·c++