用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和内存利用率的更多相关文章

  1. 监控单个进程占用cpu与内存的使用情况

    #!/bin/bashinterval=1if [ "$1" != "" ]then interval=$1fiecho "检查时间间隔(单位秒):& ...

  2. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...

  3. 监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。

    zzx@zzx:~$ cat warning.sh #!/bin/bash #监控系统负载与CPU.内存.硬盘.登录用户数,超出警戒值则发邮件告警.    前提安装mail服务nh=`uname -r ...

  4. 转:ZABBIX监控H3C设备的CPU和内存使用率

      由于最近监控的H3C路由器经常出现死机现象,SNMP获取不到数据,后面检查发现是CPU使用率过高,直接导致无法处理SNMP请求,所以需求来了,怎样通过SNMP监控H3C路由器的CPU和内存使用率? ...

  5. Python测试进阶——(3)编写Python程序监控计算机的服务是否正常运行

    用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务. 脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统服务的路径和所要监控的服务在进程管理器中的进 ...

  6. Python高级进阶(一)Python框架之Django入门

    传说中的Django Django由来 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下 ...

  7. Python编程进阶,Python如何实现多进程?

    进程part1 一.进程介绍 1.获取子父进程 2.进程的基本使用 2.创建带有参数的进程 3.进程之间的数据彼此隔离 4.多个进程之间的异步并发 二.join 1.基本语法 2.使用自定义类的方法创 ...

  8. shell脚本监控系统负载、CPU和内存使用情况

    hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | ...

  9. Python测试进阶——(1)安装Python测试相关模块

    安装python 安装pip yum -y install epel-release yum -y install python-pip 安装psutil 参考:https://www.cnblogs ...

随机推荐

  1. 第四节:Vuejs组件及组件之间的交互

    一. 组件及其交互 1.组件的注册 (1).全局注册 Vue.component('组件名称', { }) 第1个参数是标签名称,第2个参数是一个选项对象. 选项参数包括 data:必须是一个func ...

  2. 基于Struts2+Hibernate开发小区物业管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...

  3. python中的 dir()内置函数的作用以及使用方法

    dir() 内置函数的作用 python 内置方法有很多,无论是初学者还是精通python 的程序员都不能全部即住所有的方法,这时候 dir() 方法就非常有用了,使用 dir()函数可以查看对象内的 ...

  4. AWS-DDNS

    1. DDNS 2. 在 Linux 实例上设置动态 DNS 2.1 Ubuntu 2.2 Amazon Linux 2 2.3 Arch Linux 2.4 其他Linux系统 3. 更多相关 1. ...

  5. CF1285D Dr. Evil Underscores

    挂个链接 Description: 给你 \(n\) 个数 \(a_1,a_2,--,a_n\) ,让你找出一个 \(x\) ,使 \(x\) 分别异或每一个数后得到的 \(n\) 个结果的最大值最小 ...

  6. Kafka 启动报错java.io.IOException: Can't resolve address.

    阿里云上 部署Kafka 启动报错java.io.IOException: Can't resolve address. 本地调试的,报错 需要在本地添加阿里云主机的 host 映射   linux ...

  7. 个人相关API - 行驶方向判断函数

    calculateDrivingDirection(newCoordinates,oldCoordinates){ let o = { direction: '', deviation:null, i ...

  8. 7(计算机网络) ICMP与ping

    无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题.那台机器明明就在那里,你甚至都可以通过机器的终端连上去看.它看着好好的,可是就是连不上去,究竟是哪里出了问题呢? ICM ...

  9. 「SPOJ1487」Query on a tree III

    「SPOJ1487」Query on a tree III 传送门 把树的 \(\text{dfs}\) 序抠出来,子树的节点的编号位于一段连续区间,然后直接上建主席树区间第 \(k\) 大即可. 参 ...

  10. 已知空间三点组成的面求该面上某点的Z值

    已知空间三点,那么可以就可以确定空间三点组成的平面.此时可以根据某一点的X值和Y值,来求取该点在平面上的Z值.这个过程对于求三角面片上某点的高程或者权值特别有用,其本身也可以看作一种线性插值. 其算法 ...