昨天在对一个程序进行内存溢出的检测,需要对该程序的内存长时间进行监控,结束后,通过excel的统计图观察内存是否处于增长趋势。针对这块的监控,很多人常用的做法就是使用windows自带的性能监控工具,呵呵,是相当的简单,不过我还是比较喜欢命令行的方式,这跟我平时喜欢搞自动化有点关系吧。
今天就来跟大家介绍下typeperf这个命令,以及简单的常用技巧。
关于typeperf就不详细介绍了,你就把它当作是性能监控工具(windows自带)的命令行版本就行了,微软提供的一个命令行下的监控工具,收集性能计数器性能数据。Typeperf -?可以用来查看该命令的具体帮助。
在进行监控之前首选需要确定我们要监控的内容,是要监控内存、CPU、磁盘、网络等等?每种性能计数器都会有自己的名称,首先第一步确定我们要监控内容的性能计数器的名称。
有两种办法:
方法一:通过性能监视器,添加我们需要的性能计数器,有些计数器需要选择对应的实例,也就是你需要监控哪个进程的性能,选择添加完计数器后,点击确定按钮。
这时会在性能监视器主窗口显示所选择的性能计数器的数据统计趋势,右击主窗口空白处,弹出的菜单中选择“属性”菜单。
在监视器的 属性对话框中数据选项卡里,可以很清楚的看到性能计数器具体的名称。将其一个个抄写一遍至文本文件吧,不知道能否复制,可以尝试下。
方法二:第二种方法也是我推荐的一种方法,在命令行下使用typeperf -qx来进行过滤,前提是你需要对几类性能计数器要有所了解,知道其简单的单词拼写,这块大家简单记录下就OK了,也就那几种常用的,进程、磁盘、网络、内存等进程后期我会整理下。进程性能计数器开头都是Process,内存相关的是Memory等等。可以通过typeperf -qx导出所有的性能计数器,通过 重定向将返回结果导出到文本中,例如:typeperf -qx > all_counters.txt,在该文本中寻找你所需要的计数器吧【太多了,你得通过关键词查找的方式一遍遍过滤】。
使用typeperf -qx执行过程中可以过滤么?答案是可以的。看下面的截图,qx参数后面有个object的选项,跟具体的计数器名称。这个名称需要自己记了。
Typeperf -q 与typeperf -qx的区别,自己针对性的执行一遍看看吧,相信你会理解的。
下面来举个例子,例如我想监控某个OUTLOOK进程的cpu、内存:
1、我们这次是监控某一个具体的进程,是一个具体的实例,那么肯定使用typeperf -qx,进程的计数器名称为Process,因此执行命令typeperf -qx Process
2、执行完后,相信你会看到很多的内容,实例都在Process后面括号中区别体现,通过任务管理器确定我们的outlook的具体进程,查看后得出进程为OUTLOOK.EXE,为大写,typeperf中对大小写敏感,这点需要注意,那么实例的名字就是OUTLOOK,对应就是Process(OUTLOOK),如何在刚才的结果中过滤出带有OUTLOOK的字符串的计数器呢?使用FIND命令配合管道,typeperf -qx Process | FIND "OUTLOOK",执行完后你会发现关于OUTLOOK这个进程的相关的性能计数器都列出来了,而且不是很多,手工复制都可以了,呵呵。
3、接下来可以通过FIND命令继续进行过滤,例如过滤typeperf -qx Process | FIND "OUTLOOK" | FIND "Processor"
过滤完后只有一条了,正是我们所需要的cpu的计数器。通过重定向将返回结果输出至counters.txt文件中。
4、继续过滤与内存相关的
继续使用重定向进行追加,大家需要注意这里使用的是追加重定向
追加完后查看下我们的counters.txt文件内容
5、接下来使用typeperf命令来对这些性能计数器进行监控,使用命令
TYPEPERF -f CSV -o MyCounters.csv -si 15 -cf counters.txt -sc 240
参数说明可参考typeperf -?
-f:表示输出文件类型
-o:表示输出文件名称
-si:表示性能计数器数据采集周期(每个多少秒采集一次,注意格式)
-cf:表示性能计数器的配置文件(就是之前我们做好的counters.txt)
-sc:表示总共需要收集多少次
以上命令表示每隔15秒收集一次,总共收集240次,总共耗时15*240 = 15*60*4 = 3,600 = 1小时,表示对OUTLOOK进程的CPU以及内存进行1个小时的监控。
6、执行完后,在C:\Users\Administrator目录下会生成 MyCounters.csv文件,打开后就跟excel一样,选中一列,插入统计图表,可以非常直观的看到某一性能计数器在一小时内的走向
本次分享结束
最后还有一些问题,例如具体需要监控哪些内容,以及性能分析方面的问题大家可以发散思考下。监控只是一种手段,是为了方便我们接下来的分析。