Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率
用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示。
脚本的工作原理是这样的:脚本读取配置文件config.ini,读取预先配置好的进程的PID,之所以要用配置文件,是为了方便给需要的朋友,你只需要修改PID就可以了,源代码就不需要修改了。具体的看代码中的注释吧。下面的是配置文件 config.ini
[MonitorProcessID] ProcessID: 7544
上面可以根据你的需求配置不同的进程ID,我是需要监控 JMeter这个程序,通过 jps -l 查看该进程的PID,填写配置文件内容。
下面来看看monitor190620.py的代码(该代码在CentOS下运行时需要改正一行代码:from ConfigParser import ConfigParser):
# -*- encoding: utf-8 -*-
import psutil
import csv
import time
from configparser import ConfigParser
CONFIGFILE = 'config.ini'
config = ConfigParser()
config.read(CONFIGFILE)
ProcessID = config.get('MonitorProcessID', 'ProcessID')
# 读取配置文件中的进程ID,这个参数可以在配置文件中修改
proc = psutil.Process(int(ProcessID))
#print(ProcessID,"% .2f% %"%(proc.memory_percent()),"% .2f% %"%(proc.cpu_percent()),proc.name(),proc.exe())
f = open('pid.csv', 'w')
f.truncate()
f_csv = csv.writer(f)
flag = 1
while flag < 10:
row = []
row = [ProcessID,'%.2f'%(proc.memory_percent()),'%.2f'%(proc.cpu_percent()),time.strftime("%H:%M:%S", time.localtime()),proc.name(),proc.exe()]
f_csv.writerow(row)
flag += 1
time.sleep(4)
f.close()
执行后,生成的 pid.csv 的文件内容为:
7544,3.12,0.00,15:39:12,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:16,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:20,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:24,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:28,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:32,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:36,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:40,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe 7544,3.12,0.00,15:39:44,java.exe,C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_119167744\java.exe
编写 show190620.py ,读取 pid.csv 的文件内容,做统计分析,并将分析结果可视化为图表:
import csv
import pandas as pd
import matplotlib.pyplot as plt
time = []
cpu = []
mem = []
with open('pid.csv')as f:
f_csv = csv.reader(f)
for row in f_csv:
if len(row): #判断是不是空行,csv中隔一行记录运行的信息
time.append(row[3])
cpu.append(float(row[2]))
mem.append(float(row[1]))
else:
continue
print(time)
print(cpu)
print(mem)
s_cpu = pd.Series(cpu)
s_mem = pd.Series(mem)
cpu_mean = s_cpu.mean()
mem_mean = s_mem.mean()
print('cpu利用率平均值是:%f' % cpu_mean)
print('内存利用率平均值是:%f' % mem_mean)
plt.plot(time,cpu, c='r')
plt.plot(time,mem, c='b')
plt.show()
返回信息:
['15:39:12', '15:39:16', '15:39:20', '15:39:24', '15:39:28', '15:39:32', '15:39:36', '15:39:40', '15:39:44'] [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] [3.12, 3.12, 3.12, 3.12, 3.12, 3.12, 3.12, 3.12, 3.12] cpu利用率平均值是:0.000000 内存利用率平均值是:3.120000
并显示图表:

参考:
https://www.cnblogs.com/yueminghai/p/6632871.html
https://www.cnblogs.com/xiaobeibei26/p/6481707.html
https://www.cnblogs.com/ratels/p/11023109.html
https://www.cnblogs.com/sen-c7/p/9473224.html
https://blog.csdn.net/cz505632696/article/details/80025816
https://blog.csdn.net/katyusha1/article/details/81606175
https://www.runoob.com/python/python-lists.html
https://www.cnblogs.com/AiyaFocus/p/AiyaFocus.html
https://www.cnblogs.com/haiyan123/p/9104143.html
https://www.cnblogs.com/deepblue775737449/p/8507078.html
https://www.cnblogs.com/ratels/p/11037661.html
Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率的更多相关文章
- 监控单个进程占用cpu与内存的使用情况
#!/bin/bashinterval=1if [ "$1" != "" ]then interval=$1fiecho "检查时间间隔(单位秒):& ...
- Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率
monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...
- 监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。
zzx@zzx:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警. 前提安装mail服务nh=`uname -r ...
- 转:ZABBIX监控H3C设备的CPU和内存使用率
由于最近监控的H3C路由器经常出现死机现象,SNMP获取不到数据,后面检查发现是CPU使用率过高,直接导致无法处理SNMP请求,所以需求来了,怎样通过SNMP监控H3C路由器的CPU和内存使用率? ...
- Python测试进阶——(3)编写Python程序监控计算机的服务是否正常运行
用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务. 脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统服务的路径和所要监控的服务在进程管理器中的进 ...
- Python高级进阶(一)Python框架之Django入门
传说中的Django Django由来 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下 ...
- Python编程进阶,Python如何实现多进程?
进程part1 一.进程介绍 1.获取子父进程 2.进程的基本使用 2.创建带有参数的进程 3.进程之间的数据彼此隔离 4.多个进程之间的异步并发 二.join 1.基本语法 2.使用自定义类的方法创 ...
- shell脚本监控系统负载、CPU和内存使用情况
hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...
- Python测试进阶——(1)安装Python测试相关模块
安装python 安装pip yum -y install epel-release yum -y install python-pip 安装psutil 参考:https://www.cnblogs ...
随机推荐
- 第七届蓝桥杯javaB组真题解析-方格填数(第六题)
题目 /* 方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (如果显 ...
- 标签UILabel的讲解
首先,我先自定义几个名词,方便接下来的讲解工作.如下图所示: 接下来,通过五个方面来讲解我们能对UILabel做出哪些改变或者称之为设置: 1.文字 1.1普通文字:内容text.字体大小font.字 ...
- day4-1深入理解对象之创建对象
深入理解对象 之创建对象: 工厂模式: 工厂模式虽然解决了创建\多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型) 工厂模式问题:那就是识别问题,因为根本无法 搞清楚他们到底是 ...
- luogu P2704 炮兵阵地(经典状态压缩DP)
方格有m*n个格子,一共有2^(m+n)种排列,很显然不能使用暴力法,因而选用动态规划求解. 求解DP问题一般有3步,即定义出一个状态 求出状态转移方程 再用算法实现.多数DP题难youguan点在于 ...
- ProgressBarForm 进度条
ProgressBarForm public partial class ProgressBarForm : Form { private Panel panel1 = new System.Wind ...
- MCM(矩阵链乘法)
这是<算法导论>动态规划中的一个问题.问题简述如下:我们在求解矩阵相乘时通常会有一个最优括号方案来对矩阵进行顺序相乘,这样会减少大量的计算时间. 我们知道矩阵A.B相乘,只能是当矩阵A的列 ...
- C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据
练习8.1:编写函数.接受一个istream&参数,返回值类型也是istream&.此函数必须从给定流中读取数据,直至遇到文件结束标识时停止. #include <iostrea ...
- js 表格操作----添加删除
js 表格操作----添加删除 书名:<input type="text" id="name"> 价格:<input type="t ...
- 单表千亿电信大数据场景,使用Spark+CarbonData替换Impala案例
[背景介绍] 国内某移动局点使用Impala组件处理电信业务详单,每天处理约100TB左右详单,详单表记录每天大于百亿级别,在使用impala过程中存在以下问题: 详单采用Parquet格式存储,数据 ...
- php 人员权限管理(RBAC)
一.想好这个权限是什么? 就做一个就像是vip的功能,普通用户和vip用户的功能是不一样的,先来考虑一下数据库怎么设计 肯定要有用户表.还有用户所用的角色.然后就是权限功能表:可是在这里面有关联也就 ...