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

news/2024/11/16 7:05:19/

背景

服务器上部署了一套目标检测的程序,做成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 timep = psutil.Process()
while True:cpu_usage = p.cpu_percent(interval=1)if cpu_usage > 50:  # 如果CPU使用率超过50%time.sleep(1)  # 暂停1秒

二 限制内存使用

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

python">import resourcedef 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并设置资源限制。

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中。

sudo cgclassify -g memory,cpu:mygroup <pid>

docker 容器限制

docker run --memory="500m" --cpus="0.5" my_python_app

使用systemd服务文件:

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

[Service]
ExecStart=/usr/bin/python3 /path/to/your_script.py
MemoryLimit=500M
CPUQuota=50%

http://www.ppmy.cn/news/1547383.html

相关文章

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

大模型研究报告 | 2024年中国金融大模型产业发展洞察报告|附34页PDF文件下载

随着生成算法、预训练模型、多模态数据分析等AI技术的聚集融合&#xff0c;AIGC技术的实践效用迎来了行业级大爆发。通用大模型技术的成熟推动了新一轮行业生产力变革&#xff0c;在投入提升与政策扶植的双重作用下&#xff0c;以大模型技术为底座、结合专业化金融能力的金融大…

GaussDB全密态数据库等值查询

全密态数据库等值查询 可获得性 本特性自V500R001C20版本开始引入。 特性简介 密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成…

LeetCode - #134 加油站

文章目录 前言1. 描述2. 示例3. 答案关于我们前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新到 131 期,我们会保持更新时间和进度(周一…

开发中SQL积累

1.SQL中判断varchar类型是否为空&#xff1f; 检查 NULL 值&#xff1a; WHERE column_name IS NULL 检查空字符串&#xff1a; WHERE column_name 结合 NULL 和空字符串的检查&#xff1a; WHERE column_name IS NULL OR column_name 2.TRIM函数 作用&#xff1a;…

如何用Java爬虫“偷窥”淘宝商品类目API的返回值

在这个数据为王的时代&#xff0c;获取信息就像是在玩一场大型的寻宝游戏。而淘宝&#xff0c;作为电商界的巨人&#xff0c;其商品类目API就像是藏宝图上的秘密标记。今天&#xff0c;我们就来聊聊如何用Java爬虫技术&#xff0c;悄悄地“偷窥”这些宝藏。 准备工作&#xff1…

【大数据学习 | flume】flume之常见的source组件

1. exec source Exec Source&#xff1a;监听一个指定的命令&#xff0c;获取一条命令的结果作为它的数据源 ; 常用的是tail -F file指令监控一个文件&#xff0c;即只要应用程序向日志(文件)里面写数据&#xff0c;source组件就可以获取到日志(文件)中最新的内容 。 可用此方…

WEB攻防-通用漏洞SQL注入sqlmapOracleMongodbDB2等

SQL注入课程体系&#xff1a; 1、数据库注入-access mysql mssql oracle mongodb postgresql 2、数据类型注入-数字型 字符型 搜索型 加密型&#xff08;base64 json等&#xff09; 3、提交方式注入-get post cookie http头等 4、查询方式注入-查询 增加 删除 更新 堆叠等 …