适用于一次统计几十台机器的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结果的更多相关文章

  1. C# 视频监控系列:学习地址汇总

    原文地址:http://www.cnblogs.com/over140/archive/2009/04/07/1429308.html 前言 对于视频监控系统大家应该是不陌生的,实施的路况信息.地铁. ...

  2. 【转】C# 视频监控系列(12):H264播放器——播放录像文件

    原文地址:http://www.cnblogs.com/over140/archive/2009/03/23/1419643.html?spm=5176.100239.blogcont51182.16 ...

  3. 前端监控系列4 | SDK 体积与性能优化实践

    背景 字节各类业务拥有众多用户群,作为字节前端性能监控 SDK,自身若存在性能问题,则会影响到数以亿计的真实用户的体验.所以此类 SDK 自身的性能在设计之初,就必须达到一个非常极致的水准. 与此同时 ...

  4. golang pprof 监控系列(1) —— go trace 统计原理与使用

    golang pprof 监控系列(1) -- go trace 统计原理与使用 服务监控系列文章 服务监控系列视频 关于go tool trace的使用,网上有相当多的资料,但拿我之前初学golan ...

  5. golang pprof监控系列(2) —— memory,block,mutex 使用

    golang pprof监控系列(2) -- memory,block,mutex 使用 大家好,我是蓝胖子. profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥呢? ...

  6. golang pprof 监控系列(3) —— memory,block,mutex 统计原理

    golang pprof 监控系列(3) -- memory,block,mutex 统计原理 大家好,我是蓝胖子. 在上一篇文章 golang pprof监控系列(2) -- memory,bloc ...

  7. golang pprof 监控系列(4) —— goroutine thread 统计原理

    golang pprof 监控系列(4) -- goroutine thread 统计原理 大家好,我是蓝胖子. 在之前 golang pprof监控 系列文章里我分别介绍了go trace以及go ...

  8. golang 必会之 pprof 监控系列(5) —— cpu 占用率 统计原理

    golang pprof 监控系列(5) -- cpu 占用率 统计原理 大家好,我是蓝胖子. 经过前面的几节对pprof的介绍,对pprof统计的原理算是掌握了七八十了,我们对memory,bloc ...

  9. 【转】apache kafka监控系列-KafkaOffsetMonitor

    apache kafka监控系列-KafkaOffsetMonitor 时间 2014-05-27 18:15:01  CSDN博客 原文  http://blog.csdn.net/lizhitao ...

  10. Google C++测试框架系列:入门

    Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...

随机推荐

  1. Swoole从入门到入土(17)——WebSocket服务器[成员函数与配置选项]

    这一节,我们重点了解websocket server的成员函数以及相关的配置选项. 1.成员函数 push:向 WebSocket 客户端连接推送数据,长度最大不得超过 2M. Swoole\WebS ...

  2. P1536 村村通(并查集)

    村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接 ...

  3. win32-FileTimeToSystemTime的使用

    #include <Windows.h> #include <iostream> #include <string> #pragma warning(disable ...

  4. git bash走代理

    git config --global http.proxy 'http://127.0.0.1:7890' git config --global https.proxy 'http://127.0 ...

  5. 【Azure 媒体服务】Azure Media Service上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢?

    问题描述 Azure Media Service上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢? 问题解答 Azure Med ...

  6. 图数据库实操:用 Nebula Graph 破解成语版 Wordle 谜底

    本文首发于 Nebula Graph Community 公众号 春节期间如果有小伙伴玩过 Wordle 这个火爆社交媒体的猜词游戏,可能对成语版本的汉兜有所耳闻.在玩汉兜过程中,我发现用 Nebul ...

  7. 2023 Gartner RPA魔力象限报告解读:国产厂商“破纪录”跃升意味着什么?

    2023 Gartner RPA魔力象限报告解读:象限跃升彰显国产RPA厂商实力 2023 Gartner RPA魔力象限报告四大行业趋势,国产RPA厂商已在践行 文/王吉伟 8月3日,全球著名咨询调 ...

  8. P2251 质量检测(分块线段树RMQ单调队列)

    P2251 质量检测 正解应该是ST表和单调队列,不过对于这道题来说只有查询没有修改,这里我还是想用线段树和分块来写,不得不说分块是真好,优雅的暴力 线段树版本: #include <bits/ ...

  9. mybaits 笔记2022年8月学习笔记

    mybatis整理 前期准备 安装必要依赖: idea开发mybatis,如果学习测试,可以在一个直接建一个空白项目,如果是用spring boot,则建议用用boot的安装捆绑方式 核 心依赖 or ...

  10. 基于STM32F407MAC与DP83848实现以太网通讯二(DP83848硬件配置以及寄存器)

    参考内容:DP83848数据表 一.PHY DP83848功能模块图 DP83848的硬件模块主要为: MII/RMII/SNI INTERFACES:用于与MAC数据传输的MII/RMII/SNI接 ...