最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python监控进程性能数据并绘图保存为PDF文档

来源:动视网 责编:小采 时间:2020-11-27 14:41:51
文档

Python监控进程性能数据并绘图保存为PDF文档

Python监控进程性能数据并绘图保存为PDF文档:引言 利用psutil模块(https://pypi.python.org/pypi/psutil/),能够非常方便的监控系统的CPU、内存、磁盘IO、网络带宽等性能参数,以下是否代码为监控某个特定程序的CPU资源消耗,打印监控数据,最终绘图显示,并且保存为指定的 PDF 文档备份。 示范
推荐度:
导读Python监控进程性能数据并绘图保存为PDF文档:引言 利用psutil模块(https://pypi.python.org/pypi/psutil/),能够非常方便的监控系统的CPU、内存、磁盘IO、网络带宽等性能参数,以下是否代码为监控某个特定程序的CPU资源消耗,打印监控数据,最终绘图显示,并且保存为指定的 PDF 文档备份。 示范


引言

利用psutil模块(https://pypi.python.org/pypi/psutil/),能够非常方便的监控系统的CPU、内存、磁盘IO、网络带宽等性能参数,以下是否代码为监控某个特定程序的CPU资源消耗,打印监控数据,最终绘图显示,并且保存为指定的 PDF 文档备份。

示范代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2015 By Thomas Hu. All rights reserved.

@author : Thomas Hu (thomashtq#163.com)
@version: 1.0
@created: 2015-7-14
'''
import matplotlib.pyplot as plt
import psutil as ps
import os
import time
import random
import collections
import argparse

class ProcessMonitor(object):
 def __init__(self, key_name, fields, duration, interval):
 self.key_name = key_name
 self.fields = fields
 self.duration = float(duration)
 self.inveral = float(interval)

 self.CPU_COUNT = ps.cpu_count()
 self.MEM_TOTAL = ps.virtual_memory().total / (1024 * 1024)
 self.procinfo_dict = collections.defaultdict(dict)


 def _get_proc_info(self, pid):
 try:
 proc = ps.Process(pid)
 name = proc.name()
 # If not contains the key word, return None
 if name.find(self.key_name) == -1:
 return None
 pinfo = {
 "name": name,
 "pid" : pid,
 }
 # If the field is correct, add it to the process information dictionary.
 for field in self.fields:
 if hasattr(proc, field):
 if field == "cpu_percent":
 pinfo[field] = getattr(proc, field)(interval = 0.1) / self.CPU_COUNT
 elif field == "memory_percent":
 pinfo[field] = getattr(proc, field)() * self.MEM_TOTAL / 100
 else:
 pinfo[field] = getattr(proc, field)()
 if pid not in self.procinfo_dict:
 self.procinfo_dict[pid] = collections.defaultdict(list)
 self.procinfo_dict[pid]["name"] = name
 for field in self.fields:
 self.procinfo_dict[pid][field].append(pinfo.get(field, 0))
 print(pinfo)
 return pinfo
 except:
 pass
 return None

 def monitor_processes(self):
 start = time.time()
 while time.time() - start < self.duration:
 try:
 pids = ps.pids()
 for pid in pids:
 self._get_proc_info(pid)
 except KeyboardInterrupt:
 print("Killed by user keyboard interrupted!")
 return

 def _get_color(self):
 color = "#"
 for i in range(3):
 a = hex(random.randint(0, 255))[2:]
 if len(a) == 1:
 a = "0" + a
 color += a
 return color.upper()

 def draw_figure(self, field, pdf):
 # Draw each pid line
 for pid in self.procinfo_dict:
 x = range(len(self.procinfo_dict[pid][field]))
 #print x, self.procinfo_dict[pid][field]
 plt.plot(x, self.procinfo_dict[pid][field], label = "pid" + str(pid), color = self._get_color())
 plt.xlabel(time.strftime("%Y-%m-%d %H:%M:%S"))
 plt.ylabel(field.upper())
 plt.title(field + " Figure")
 plt.legend(loc = "upper left")
 plt.grid(True)
 plt.savefig(pdf, dpi = 200)
 plt.show()

def Main():
 parser = argparse.ArgumentParser(description='Monitor process CPU and Memory.')
 parser.add_argument("-k", dest='key', type=str, default="producer", 
 help='the key word of the processes to be monitored(default is "producer")')
 parser.add_argument("-d", dest='duration', type=int, default=60,
 help='duration of the monitor to run(unit: seconds, default is 60)')
 parser.add_argument('-i', dest='interval', type=float, default=1.0,
 help='interval of the sample(unit: seconds, default is 1.0)')
 args = parser.parse_args()
 fields = ["cpu_percent", "memory_percent"]
 #print args.key, args.duration, args.interval
 pm = ProcessMonitor(args.key, fields, args.duration, args.interval)
 pm.monitor_processes()
 pm.draw_figure("cpu_percent", "cpu.pdf")
 pm.draw_figure("memory_percent", "mem.pdf")


if __name__ == "__main__":
 Main()
 
 

输出结果示范图

文档

Python监控进程性能数据并绘图保存为PDF文档

Python监控进程性能数据并绘图保存为PDF文档:引言 利用psutil模块(https://pypi.python.org/pypi/psutil/),能够非常方便的监控系统的CPU、内存、磁盘IO、网络带宽等性能参数,以下是否代码为监控某个特定程序的CPU资源消耗,打印监控数据,最终绘图显示,并且保存为指定的 PDF 文档备份。 示范
推荐度:
标签: 文件 文档 程序
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top