有时服务器运维中,某些程序员的应用发布后完全不管CPU和内存的使用率,只觉得代码能运行就行了,这样给我们运维人员经常造成困扰;

比如我在zabbix平台中就经常监测到凌晨1~3~5点时候突然CPU飙升到50~93%,win和linux系统都没有比较方便的定时监控指定进程的方法,经过长时间的寻解、修改和测试,如下python代码可以实现根据pid定时监控CPU使用率和内存使用率,并输出到.csv文件,windows和linux平台皆可用:

# 本程序可以实现自动识别CPU内核数,然后根据输入的进程pid号,来计算出多核的CPU使用率和内存使用率,并将监控结果同时打印到屏幕和文件中。
import sys
import time
import psutil # 查询显示当前系统的CPU内核和颗数等信息
print('逻辑CPU个数:' + str(psutil.cpu_count())) # 取多内核平均值时应除以物理内核比较近似
print('物理CPU个数:' + str(psutil.cpu_count(logical=False)))
# print('当前可用CPU个数:' + str(len(psutil.Process().cpu_affinity()))) # 将输入的参数pid号保存到列表sys.argv中,若输入的值小于2位则中断退出并提示
if len(sys.argv) < 2:
print("输入pid值无效,请按示例输入,例:“python CPU_Analysis_Python.py pid号码”")
sys.exit() # 通过psutil模块,获取并保存pid对应的进程对象
pid = int(sys.argv[1])
p = psutil.Process(pid) # 监控进程相关的CPU和内存使用率数据,写入存储
interval = 1 # 设置监控的循环间隔时间
with open("CPU_Analysis_pid" + str(pid) + "_" + p.name() + ".csv", "a") as f: # 创建记录输出文档,格式为.csv
f.write(" 时间 , CPU使用率(%), 内存使用率(%) \n") # 写入标题——>.csv文档中
while True:
with open("CPU_Analysis_pid" + str(pid) + "_" + p.name() + ".csv", "a") as f: # 添加监控记录输出文档
current_time = time.strftime('%Y%m%d-%H:%M:%S', time.localtime(time.time()))
# 计算CPU使用率(%) = 所有核心使用率之和 / (1s * 物理内核数量), 参数interval的值为获取当前CPU使用率的时间间隔
cpu_percent = round(((p.cpu_percent(interval=1) / 100) / psutil.cpu_count(logical=False)) * 100, 2)
mem_percent = p.memory_percent()
line = current_time + ',' + str(cpu_percent) + ',' + str(mem_percent)
print('时间:' + current_time + ', CPU使用率:' + str(cpu_percent) + ', 内存使用率:' + str(mem_percent)) # 输出控制台,可注销掉
f.write(line + "\n")
time.sleep(interval)

最新文章

  1. 快速理解几种常用的RAID磁盘阵列级别
  2. iOS蓝牙开发CoreBluetooth快速入门
  3. RabbitMQ入门教程——安装及配置
  4. JS-DOM2级事件对象跨浏览器处理(已封装)
  5. 教你一招 - Misc类型插件的妙用(附带插件源码)
  6. PyQt中弹出对话框操作
  7. Excel自己定义纸张打印设置碰到无法对上尺寸的问题
  8. python扒取百宝彩网站江西快三当日期号及开奖结果
  9. HDU 3595 GG and MM [Every-SG]
  10. Spring的IOC原理
  11. 统计分析与R软件-chapter2-4
  12. Hybrid APP架构设计思路
  13. TP 真阳性 TN FP FN
  14. 使用 jQuery Ajax 异步登录,并验证用户输入信息(maven)
  15. 四,ESP8266 TCP服务器(基于Lua脚本语言)
  16. centOS安装ab测试工具
  17. 1710 生日蛋糕(1999 noi)
  18. Matlab 使用的一些常用技巧
  19. 《C#求职宝典》读书笔记
  20. springboot成神之——mybatis在spring-boot中使用的几种方式

热门文章

  1. GeoServer发布Oracle空间数据
  2. gin 01
  3. LeetCode-1669 合并两个链表
  4. Optimum + ONNX Runtime: 更容易、更快地训练你的 Hugging Face 模型
  5. Truenas core 13连接LDAP,获取AD域用户及自动分配权限---chatGPT回复,未做证实
  6. 两行CSS让页面提升了近7倍渲染性能
  7. flask 项目构建
  8. 四大组件之服务Service
  9. 通过url跳转到页面锚点
  10. Eclipse git提交代码 覆盖问题