用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

最新文章

  1. ASP.NET MVC Model元数据(二)
  2. Ext小总结
  3. Power of Three
  4. 终端ssh登录mac用shell打包ipa报错:replacing existing signature
  5. ffmpeg-20160816-bin.7z
  6. The 6th Zhejiang Provincial Collegiate Programming Contest-&gt;Problem I:A Stack or A Queue?
  7. hdu 5128 The E-pang Palace
  8. 简单dp --- HDU1248寒冰王座
  9. 使用httperrequest,模拟发送及接收Json请求
  10. jsp用el表达式获取后台传来的值,或者获取session中的值
  11. python第一周语言基础
  12. css3 动画与display:none冲突的解决方案
  13. 《ASP.NET MVC企业实战》(三)MVC开发前奏
  14. tomcat环境多个jdk版本自定义使用JDK版本及路径
  15. centos 6.4配置samba+ldap认证
  16. 【AMQ】之JMS Mesage structure(JMS消息结构)
  17. ElasticSearch 5.4 安装
  18. Pro Git读书笔记 - 分支
  19. 1 CRM需求分析,数据库表,录入数据
  20. centos升级内核(rpm方式)

热门文章

  1. CSS Sprite精灵图如何缩放大小
  2. Python开发:变量类型
  3. kali apt update 错误——下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
  4. USN日志
  5. 敏捷团队协作:Confluence简易教程
  6. Ubuntu18.04下Qt5.9.8连接mysql数据库失败的解决办法
  7. Hexo引入Mermaid流程图和MathJax数学公式
  8. SRS——打开 stream caster
  9. redhat 7.6 rpm ,yum ,编译安装
  10. Servlet简单的登陆窗口