【性能测试】获取性能系统指标之示例Python代码
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import datetime
import time
import psutil
from ctypes import *"""
性能测试示例Python代码:1、获取系统性能指标(内存、cpu、GDI、IO)2、保存数据至日志文件 (./******.log)3、可同时监控多个程序(xiadan:hexin)
"""class PerfMonitor(object):def __init__(self, pnames, monitor_time):self.pnames = pnamesself.monitor_time = monitor_timeself.perflog = "./"self.perfimg = "./"def getGDIcount(self,PID):PH = windll.kernel32.OpenProcess(5432, 0, PID)GDIcount = windll.user32.GetGuiResources(PH, 0)windll.kernel32.CloseHandle(PH)return GDIcountdef time_wait(self,proc_name):# 增加隐形等待时间pid_list = []now_data = time.time()while time.time() < now_data + 35:pid_data = list(filter(lambda x: x.name() == proc_name, psutil.process_iter()))if pid_data != []:pid_list.append(list(pid_data)[0].pid)breakelse:time.sleep(0.1)return pid_listdef get_pid(self,pnames):# 获取进程号列表pnames = map(lambda x : (x + ".exe"), pnames.split(":"))pid_lists = []for proc_name in pnames:pid = self.time_wait(proc_name)pid_lists.extend(pid)return pid_listsdef write_logs(self,log_filepath,usagestr):# 数据写入log日志fp=open(log_filepath,"a")fp.write(usagestr)fp.close()def get_nowtime(self):# 获取现在时间now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")return now_timedef get_log_filepaths(self, p, monitor, types, check_times):name = p.name()names = name.split(".")[0]current = check_timesusagestr = current + "\t" + str(monitor) + "\n"log_filepath = self.perflog + types + "-" + names + "-" + str(p.pid) + ".log"self.write_logs(log_filepath,usagestr)def perfrun(self):try:monitorsecond = self.monitor_time * 60begintime = int(time.time())p_list = []for pid in self.get_pid(self.pnames):p_list.append((pid,psutil.Process(int(pid))))while((int(time.time()) - begintime) <= monitorsecond):for (pid, p) in p_list:# 内存mem_time = self.get_nowtime()memusage = p.memory_info().rss/1024.0/1024.0# CPUcpu_time = self.get_nowtime()cpuusage = p.cpu_percent()# GDIgdi_time = self.get_nowtime()GDIcount = self.getGDIcount(pid)# IOiousage = p.io_counters()read_count_time = self.get_nowtime()read_count = iousage.read_countwrite_count_time = self.get_nowtime()write_count = iousage.write_countread_bytes_time = self.get_nowtime()read_bytes = iousage.read_byteswrite_bytes_time = self.get_nowtime()write_bytes = iousage.write_bytes# 写入日志self.get_log_filepaths(p, memusage, "mem", mem_time)self.get_log_filepaths(p, cpuusage, "cpu", cpu_time)self.get_log_filepaths(p, GDIcount, "gdi", gdi_time)self.get_log_filepaths(p, read_count, "io-read-count", read_count_time)self.get_log_filepaths(p, write_count, "io-write-count", write_count_time )self.get_log_filepaths(p, read_bytes, "io-read-bytes", read_bytes_time)self.get_log_filepaths(p, write_bytes, "io-write-bytes", write_bytes_time)time.sleep(2)now = datetime.datetime.now().strftime("%y-%m-%d-%H-%M-%S")except Exception as e:print(e)if __name__ == '__main__':if(len(sys.argv) == 3):pnames=sys.argv[1]monitor_time=int(sys.argv[2])else:print("""|====================================================================================|""")print("""| Usage Instructions |""")print("""|====================================================================================|""")print("""| usage : python perfmonitor.py pnames monitor_time (minute) |""")print("""| example : python perfmonitor.py xiadan:hexin 10 |""")print("""|====================================================================================|""")pnames = "xiadan"monitor_time = 5perfm = PerfMonitor(pnames, monitor_time)perfm.perfrun()
【性能测试】获取性能系统指标之示例Python代码相关推荐
- 图像分割评测指标MIOU之python代码详解
Pixel Accuracy(PA,像素精度):这是最简单的度量,为标记正确的像素占总像素的比例. Mean Pixel Accuracy(MPA,均像素精度):是PA的一种简单提升,计算每个类内被正 ...
- c调用python脚本如何获取结果_使用C++调用Python代码的方法详解
一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性-&g ...
- python获取交易软件数据_几行Python代码,轻松获取美股阿里巴巴的交易数据
原创: 野马 菜鸟学Python 学Python可以干很多事情,比如爬虫,数据分析,机器学习,但是有一个非常小众的分支,不仅结合了两大高薪行业,而且还薪水非常诱人,就是量化金融岗位.目前Python已 ...
- 帮我写一段能实时获取经纬度和具体地区的python代码
你好,你可以使用 Python 的 geocoder 库来实现实时获取经纬度和具体地区的功能. 首先,你需要安装 geocoder 库,使用以下命令安装: pipinstall geocoder 然后 ...
- 在Ubuntu中获取奥比中光的深度值 Python代码
一.官网下载资料 https://developer.orbbec.com.cn/download.html?id=32下载SDK,并解压到Ubuntu中 二.进行后续工作 奥比中光Astra s P ...
- QQmusic python,js获取sign及音频爬虫示例
目录 js获取sign sign是什么 sign获取 sign加密方式 音频爬虫示例 Python代码(调用js文件) js获取sign sign是什么 以本人喜欢的歌手(ふじた まいこ)主页为示例 ...
- php中files和FILRS,php获取文件内容最后一行示例
php获取文件内容最后一行示例 复制代码 代码如下: $rs = 'README.md'; $fp = fopen($rs, 'r'); fseek($fp,-1,SEEK_END); $s = '' ...
- 【理论 | 代码】机器学习分类与回归性能评估指标大全
一.回归指标 1.1 均方误差(Mean Squared Error, MSE) MSE 称为均方误差,又被称为 L2 范数损失,该统计参数是预测数据和原始数据对应点误差的平方和的均值,公式如下: M ...
- 伯努利方程示例 Python 计算(汽水流体和喷泉工程)
伯努利原理 在流体的水平流动中,流体速度较高的点比流体速度较慢的点具有更小的压力. 不可压缩流体在到达狭窄的收缩部分时必须加速,以保持恒定的体积流量. 这就是为什么软管上的窄喷嘴会导致水流加速的原因. ...
最新文章
- fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack:
- docker tomcat mysql_Docker下Tomcat容器中使用Mysql的方法
- 查看spark是否有僵尸进程,有的话,先杀掉。可以使用下面命令
- 面试奇葩——交换两变量值的一些邪门歪道
- php实现pdf文件的生成与下载
- 作者:张群(1988-),女,博士,中国电子技术标准化研究院设备与数据研究室副主任。...
- C++:错误(活动) E0144 “const char *“ 类型的值不能用于初始化 “char *“ 类型的实体
- JSON解析工具比较,主要GSON和FastJSON
- java个人中心修改界面怎么整_怎么对个人中心页面访问进行控制
- 解决ubuntu下不能mount windows 盘的问题
- NYOJ--114--某种序列(大数)
- 基于WeMos的WiFi避障小车
- 电脑控制所有手机的两种方式
- android 7 sl4a,SL4A蟒蛇作出android手机
- 《objective-c程序设计》学习笔记
- python比较火的培训机构
- 计数排序 | Counting Sort
- 残差分析(残差原理与标准化残差分析)
- 织梦dedecms网站地图生成在根目录的开发教程
- 【FreeRTOS】
热门文章
- 百度地图修改底图样式
- Scrapy爬取网页并保存到数据库中
- HDU 1218 - Blurred Vision
- 2016-ICLR-Order Matters- Sequence to sequence for sets
- redis windows版下载教程,及双系统百度网盘资源分享
- 老白理解的REDO LOG
- 零售行业数据分析运用
- jQuery 遍历 - 后代
- 来自灵魂的拷问:之迁移之后SQL执行变慢了
- 针对Typora for Win v0.11.18最后一个免费版本安装后提示更新解决办法This beta version of Typora Q is expired