适用于一次统计几十台机器的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. NC18987 粉嘤花之恋

    题目链接 题目 题目描述 qn是个特别可爱的小哥哥,qy是个特别好的小姐姐,他们两个是一对好朋友 [ cp (划掉~) 又是一年嘤花烂漫时,小qn于是就邀请了qy去嘤花盛开的地方去玩.当qy和qn来到 ...

  2. NC16742 [NOIP2002]字串变换

    题目链接 题目 题目描述 已知有两个字串 A, B及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在A中的子串 A1可以变换为 B1.A2可以变换 ...

  3. Java官方文档

    https://www.oracle.com/java/technologies/ https://www.oracle.com/java/technologies/downloads/archive ...

  4. pico命令

    pico命令 pico是一个简单易用.以显示导向为主的文字编辑程序,具有pine电子邮件编写器的风格.在现代Linux系统上,nano即pico的GNU版本是默认安装的,在使用上和pico一模一样. ...

  5. 数据分析day01

    数据分析三剑客 numpy pandas(重点) matplotlib numpy模块 NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分 ...

  6. 【LeetCode动态规划#17】知道秘密的人,维护多个dp数组

    知道秘密的人数 在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密.同时给你一个整数 forget ,表 ...

  7. 【LeetCode数组#5行为模拟】螺旋矩阵II+I

    螺旋矩阵II 力扣题目链接(opens new window) 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ ...

  8. Taurus.MVC WebMVC 入门开发教程4:数据列表绑定List<Model>

    前言: 在本篇 Taurus.MVC WebMVC 入门开发教程的第四篇文章中, 我们将学习如何实现数据列表的绑定,通过使用 List<Model> 来展示多个数据项. 我们将继续使用 T ...

  9. 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided

    问题描述 在App Service For Linux 中,部署NodeJS应用,应用启动失败. 报错信息为: 2023-08-29T11:21:36.329731566Z RangeError: I ...

  10. 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案

    问题描述 在AKS集群中部署calico时候,遇见 ImagePullBackOff 问题. 在创建POD calico-typha-horizontal-autoscale 时候遇见拉取镜像失败问题 ...