测试监控系列:使用vb批量统计nmon结果
适用于一次统计几十台机器的nmon监控结果。
新建excel,在设置里打开开发者工具,点查看代码,把下面代码贴到模块里即可。最后把表格保存为.xlsm
Sub for_nmon()
'用来统计nmon结果 '2.0改进空间:已修改为,批量加入文件,导入多个文件后,filepath变为数组,然后遍历数组,取出结果,放到一个新excel里
'选中要统计的文件,可改为多选
filepath = Excel.Application.GetOpenFilename(Title:="选择要导入的nmon文件", MultiSelect:=True) 'If filepath = False Then
' Exit Sub
'End If '取当前表格对象
Set wkme = Excel.Application.ThisWorkbook
wkme.Activate '清空sheet页
wkme.Sheets(3).Range("1:65536").ClearContents
'以手动输入要统计的时间段 若涉及跨日要注意格式 2020/01/05 17:03 现在用下面的自动获取时间
'sbegintime= InputBox("请输入开始时间:")
'sbegintime= InputBox("请输入开始时间:")
'批量导入表格,循环统计数据后,打印到根目录下新表格中
Dim excelApp, excelWB As Object
Dim savePath, saveName As String Set excelApp = CreateObject("Excel.Application")
Set excelWB = excelApp.Workbooks.Add savePath = "d:\"
saveName = "vb_for_nmon.xls"
'excelWB.SaveAs savePath & saveName 现在不这么做,直接把结果打印到当前表格的sheet3页 excelApp.Quit '定义一个新表格,用来存统计结果
'Set wknew = Excel.Application.Workbooks.Open(savePath & saveName)
'wknew.Activate '这个用来根据导入的文件总数,定义统计结果排列顺序
Dim filecount As Integer
filecount = 2 '循环导入的文件,统计结果,这里只加了个for循环,改了最后数据打印的位置,中间的计算代码没动
For Each fname In filepath Dim wk As Excel.Workbook
Dim ws As Excel.Worksheet
Set wsThis = Excel.ActiveSheet Set wk = Excel.Application.Workbooks.Open(fname)
wk.Activate 'nmon结果首页默认有起始、结束日期,如果不用自己写时间,就用这个自动获取时间
sbegintime = Format(wk.Sheets(1).Cells(1, 5), "hh:mm")
sendtime = Format(wk.Sheets(1).Cells(1, 7), "hh:mm") '统计4个结果
'若测试有梯度,可根据行数平均分
Dim CPU#, MEM#, IOavg#, IOmax#
Dim CPUresult$, MEMresult$, IOavgresult$, IOmaxresult$ '本脚本的核心是,根据时间段,找到行数,用行数取具体值 '总行数
Dim hrow As Integer '起始行 结束行 需要分梯度时要有差值
Dim beginRow%, endRow%, chaTemp% '为了在循环中只取值一次,加了开关,默认0
Dim beginRowTemp%, endRowTemp%
beginRowTemp = 0
endRowTemp = 0 '循环拿到sheet页
For i = 1 To wk.Sheets.Count
sheetname = wk.Sheets(i).Name '取CPU平均值
If sheetname = "CPU_ALL" Then
'时间默认第一列,取总行数,遍历找时间
hrow = wk.Sheets(i).[A1].CurrentRegion.Rows.Count
For j = 2 To hrow
'格式化每个时间,逐一比较
result1 = Format(wk.Sheets(i).Cells(j, 1), "hh:mm")
'找开始行
If result1 = sbegintime Then
'按分钟匹配,有很多重复,只取第一次拿到的行数,关闭开关
If beginRowTemp = 0 Then
beginRow = j
beginRowTemp = 1
End If
End If
'找结束行
If result1 = sendtime Then
If endRowTemp = 0 Then
endRow = j
endRowTemp = 1
Exit For
End If
End If
Next j '要统计哪列写哪列,cpu在F,输入开始行、结束行 然后range选中,求平均值 格式化的Fixed表示保留两位小数
CPU = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & endRow)), "Fixed")
'加个%号
CPUresult = CPU & "%" '若要把行数分成多份 差值定义为integer类型 会自动取整数
'chaTemp = (endRow - beginRow) / 5
'CPU值也可分段统计
'CPU1 = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & beginRow + chaTemp)), "Fixed")
'CPU2 = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow + chaTemp & ":F" & beginRow + 2 * chaTemp)), "Fixed")
End If '取IO平均值、最大值
'已经有了开始、结束行,后面的就很简单了
If sheetname = "DISKBUSY" Then
IOavg = Format(Application.Average(wk.Sheets(i).Range("G" & beginRow & ":G" & endRow)), "Fixed")
IOavgresult = IOavg & "%"
IOmax = Format(Application.Max(wk.Sheets(i).Range("G" & beginRow & ":G" & endRow)), "Fixed")
IOmaxresult = IOmax & "%"
End If '取MEM值 需要先算平均值 再减, 因为是自己加的百分比,所以*100
If sheetname = "MEM" Then
memtotal = Format(Application.Average(wk.Sheets(i).Range("B" & beginRow & ":B" & endRow)), "Fixed")
memfree = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & endRow)), "Fixed")
cache = Format(Application.Average(wk.Sheets(i).Range("K" & beginRow & ":K" & endRow)), "Fixed")
buffer = Format(Application.Average(wk.Sheets(i).Range("N" & beginRow & ":N" & endRow)), "Fixed")
MEM = (memtotal - memfree - cache - buffer) / memtotal * 100
MEMresult = Format(MEM, "Fixed") & "%"
End If
Next i
'最后把结果打印到首页 '统计完把表格关了
wk.Close '把路径名改为文件名保存
fname2 = Split(fname, "\")
'UBound取数组最大下标
fname3 = fname2(UBound(fname2)) wknew.Sheets(1).Cells(filecount, 1) = fname3 wknew.Sheets(1).Cells(1, 2) = "CPU"
wknew.Sheets(1).Cells(filecount, 2) = CPUresult wknew.Sheets(1).Cells(1, 3) = "IO"
wknew.Sheets(1).Cells(filecount, 3) = IOavgresult & IOmaxresult wknew.Sheets(1).Cells(1, 4) = "MEM"
wknew.Sheets(1).Cells(filecount, 4) = MEMresult filecount = filecount + 1
Next End Sub
测试监控系列:使用vb批量统计nmon结果的更多相关文章
- C# 视频监控系列:学习地址汇总
原文地址:http://www.cnblogs.com/over140/archive/2009/04/07/1429308.html 前言 对于视频监控系统大家应该是不陌生的,实施的路况信息.地铁. ...
- 【转】C# 视频监控系列(12):H264播放器——播放录像文件
原文地址:http://www.cnblogs.com/over140/archive/2009/03/23/1419643.html?spm=5176.100239.blogcont51182.16 ...
- 前端监控系列4 | SDK 体积与性能优化实践
背景 字节各类业务拥有众多用户群,作为字节前端性能监控 SDK,自身若存在性能问题,则会影响到数以亿计的真实用户的体验.所以此类 SDK 自身的性能在设计之初,就必须达到一个非常极致的水准. 与此同时 ...
- golang pprof 监控系列(1) —— go trace 统计原理与使用
golang pprof 监控系列(1) -- go trace 统计原理与使用 服务监控系列文章 服务监控系列视频 关于go tool trace的使用,网上有相当多的资料,但拿我之前初学golan ...
- golang pprof监控系列(2) —— memory,block,mutex 使用
golang pprof监控系列(2) -- memory,block,mutex 使用 大家好,我是蓝胖子. profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥呢? ...
- golang pprof 监控系列(3) —— memory,block,mutex 统计原理
golang pprof 监控系列(3) -- memory,block,mutex 统计原理 大家好,我是蓝胖子. 在上一篇文章 golang pprof监控系列(2) -- memory,bloc ...
- golang pprof 监控系列(4) —— goroutine thread 统计原理
golang pprof 监控系列(4) -- goroutine thread 统计原理 大家好,我是蓝胖子. 在之前 golang pprof监控 系列文章里我分别介绍了go trace以及go ...
- golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理
golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...
- 【转】apache kafka监控系列-KafkaOffsetMonitor
apache kafka监控系列-KafkaOffsetMonitor 时间 2014-05-27 18:15:01 CSDN博客 原文 http://blog.csdn.net/lizhitao ...
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
随机推荐
- CF1010C Border 题解
题目传送门 前置知识 最大公约数 | 裴蜀定理 简化题意 给定一个长度为 \(n\) 的序列 \(a\),求 \((\sum\limits_{i=1}^{n}d_ia_i) \bmod k\) 一共会 ...
- JS leetcode 杨辉三角 超详细题解分析
壹 ❀ 引 刷leetcode的第四天,原题出处为杨辉三角,题目描述如下: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. ...
- NC53370 Forsaken的三维数点
题目链接 题目 题目描述 Forsaken现在在一个三维空间中,空间中每个点都可以用 \((x,y,z)\) 表示.突然,三维空间的主人出现了,如果Forsaken想要继续在三维空间中呆下去,他就 ...
- SATA学习笔记——名词解释
SATASATA(Serial Advanced Technology Attachment,串行高级技术附件)是一种基于行业标准的串行硬件驱动器接口,是由Intel.IBM.Dell.APT.Max ...
- SATA 学习笔记——Frame/Primitive解析
一.故事前传 我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点: Frame flow control CRC的生成与检测(已解析,详细见历史文章) 对数据与控制 ...
- Java设计模式-模板模式Template
介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行.它的方法的模板.它的子类可以按需要重写方法实现, ...
- vue+jsPlumb制成的流程图项目
本项目参考:https://github.com/wangduanduan/visual-ivr 主页面如下:
- Redis高级系列详解
01-Redis系列之-Redis介绍安装配置 02-Redis系列之-架构和高级API的使用 03-Redis系列之-高级用法详解 04-Redis系列之-持久化(RDB,AOF) 05-Redis ...
- 详解SSL证书系列(4)免费的SSL证书和收费的证书有什么区别
上一篇介绍了如何选择SSL证书,更多地是从证书类型角度介绍的.SSL证书有免费和收费的,那么它们之间有什么区别呢? SSL证书免费和收费的主要区别体现在以下几个方面: 1,验证类型 免费SSL证书通常 ...
- kotlin协程小记
转载请标明出处:https://www.cnblogs.com/tangZH/p/16849169.html -[kotlin协程小记]-[协程的async使用]- [kotlin协程异常处理之-tr ...