当前位置: 首页 > news >正文

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

二 限制内存使用

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

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.lryc.cn/news/484929.html

相关文章:

  • java算法性能调优:详尽探讨时间复杂度与空间复杂度的分析与优化“
  • 人工智能:塑造未来的工作与生活
  • RK3568笔记六十九: 事件回调处理之Libevent 简单使用
  • MySQL如何解决幻读?
  • Javascript_设计模式(二)
  • 时间同步服务器
  • react+hook+vite项目使用eletron打包成桌面应用+可以热更新
  • STM32 ADC --- DMA乒乓缓存
  • SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)
  • 【Windows 常用工具系列 20 -- MobaXterm 登录 WSL】
  • 【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题
  • UniApp的Vue3版本中H5配置代理的最佳方法
  • 深入了解Pod
  • 基于Spider异步爬虫框架+JS动态参数逆向+隧道代理+自定义中间件的猎聘招聘数据爬取
  • Spring 中的 BeanDefinitionParserDelegate 和 NamespaceHandler
  • BERT模型核心组件详解及其实现
  • 图论-代码随想录刷题记录[JAVA]
  • c#加载shellcode
  • HarmonyOS 开发环境搭建
  • 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
  • 深入理解 SQL_MODE 之 ANSI_QUOTES
  • 容器技术在持续集成与持续交付中的应用
  • 【嵌入式软件-STM32】OLED显示屏+调试方法
  • kubernetes简单入门实战
  • Python连接Mysql、Postgre、ClickHouse、Redis常用库及封装方法
  • 如何修改npm包
  • Django 2024全栈开发指南(三):数据库模型与ORM操作(上篇)
  • 低代码可视化-uniapp开关选择组件-低码生成器
  • 【arxiv‘24】Vision-Language Navigation with Continual Learning
  • 如何在 Ubuntu 上安装 Jupyter Notebook