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%
相关推荐
Evand J1 天前
【MATLAB例程,PDR11】二维平面下的PDR(行人航位推算)步态检测与EKF融合定位,附代码的下载链接
开发语言·matlab·平面·pdr·行人导航·步态检测
今天你AiPy了吗1 天前
AI桌面助手的隐私底线 数据可落本地不出域,还能一键切换云端,全能智能体
人工智能·python·ai·ai编程·智能体
2601_956319881 天前
近期手工规则转量化:按学习、表达、开发、验证推进
人工智能·python
青 春 记 忆1 天前
LeetCode 104. 二叉树的最大深度|Python 解法详解
python·算法·leetcode
码云骑士1 天前
110-多模型热切换-API网关-LiteLLM代理-负载均衡故障转移
运维·python·负载均衡
牛油果子哥q1 天前
C++STL算法超全精讲:排序/查找/去重/遍历/最值/合并全套API、仿函数、Lambda适配、实战避坑
开发语言·c++·算法
Xeon_CC1 天前
用C++编写屏幕准星
开发语言·c++
孤存5221 天前
c语言动态内存管理
c语言·开发语言·算法
Ali885201 天前
Python字符串方法速查表大全
前端·python
开源量化GO1 天前
近期量化实现:API 数据、策略逻辑和交易执行要连成一条线
人工智能·python