python程序对服务器cpu和内存资源占用的管理。
背景
在服务器上部署了一套目标检测的程序,做成while true 的轮询检测数据更新的定时任务。
结果没想到那台服务器还有一套可视化程序要给领导演示看,结果演示的时候平台各种报错。
然后通过top查看了一下资源利用率发现python的程序cpu 130。(其他机器上我看都是100 ,这个服务器不知道为啥是130左右超频么?)
所以寻思给程序加个资源占用的限制,跑慢一点没关系。思路为代码中加限制或者操作系统层面加限制。
代码中设置适用于需要更细粒度的控制,并且不依赖于操作系统特性的情况。
服务器上设置则更适合于生产环境,因为它利用了操作系统提供的资源管理工具,更加灵活和强大。
记录一下解决方案。各位可测试使用。
一 限制cpu使用
1.使用os.nice()函数来调整进程的优先级。例如,将优先级设置为较低的值可以降低进程的CPU占用率
import os
os.nice(10) # 将优先级设置为10(范围是-20到19,默认为0)
2.使用psutil库来监控和限制CPU使用率。
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模块来限制内存使用。
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并设置资源限制。
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%
原文地址:https://blog.csdn.net/weixin_46035550/article/details/143791222
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!