Performance Monitor采集性能数据
Performance Monitor采集性能数据
Windows本身为我们提供了很多好用的性能分析工具,大家日常都使用过资源管理器,在里面能即时直观的看到CPU占用率、物理内存使用量等信息。此外新系统中还加入了一个资源监视器(下图2)能够提供更多更直观有关CPU、I/O、网络方面的性能信息统计与视图。
当然仅靠这些工具是不能满足性能分析需求的,从Windows NT4.0时代,Windows就为我们提供了一个叫做Performance Monitor的强有力的性能工具帮助我们分析系统负载找出性能瓶颈,在Windows 7中路径是%windir%\system32\perfmon.msc,您也可以在面板的管理工具中找到它。
下面我们一起来通过几个实验了解它的基本应用。
a.在”监视工具”->”性能监视器”中添加自己需要的性能计数器,然后观察一段时间内的性能数据图表。 |
可以看到里面有极为丰富的计数器可供选择。选好后即可进行即时的数据监测。
b.由当前性能监视设置生成一个htm文件,以后只需要打开这个html文件中即可直接查看此配置下即时的性能数据,操作同在控制台中一样。 |
c.在程序中创建计数器、采集性能数据、操作计数器数据。 |
FCL中有名为System.Diagnostics的命名空间,里面提供了特定的类,使我们能够与系统进程、事件日志和性能计数器进行交互。PerformanceCounter 类使您能够监视系统性能,而 PerformanceCounterCategory 类则提供新建自定义计数器和类别的方式。
假如我们有名为“SopacoPerformanceCategory”的计数器类型,里面有CounterOne这个计数器,则可以使用诸如“PerformanceCounter counter = new PerformanceCounter("SopacoPerformanceCategory", "CounterOne", false);”的代码获得此计数器实例。PerformanceCounter有像IncrementBy这样原子操作方法,可以在并发情况下正确的修改数值。
下面的代码会在30秒内不断对CounterOne进行随机修改,可以通过性能监视器视图看到其变化。
internal class PerformanceShow_Demo
{
private static PerformanceCounter counter = new PerformanceCounter("SopacoPerformanceCategory", "CounterOne", false);
private static int n = 0;
private static System.Timers.Timer timer = new System.Timers.Timer(1000);
static void Main(string[] args)
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
counter.RawValue = 0;
timer.Enabled = true;
timer.Start();
Thread.Sleep(40000);
}
private static void timer_Elapsed(object sender, EventArgs e)
{
Console.WriteLine(e.ToString());
counter.IncrementBy(new Random().Next(-10, 20));
n++;
if(n > 30)
timer.Stop();
}
}
d.使用数据收集器,开启自动监测并持久化监测数据 |
上面过程中我们一直是通过实时图标来分析性能数据,更多时候我们需要的是让统计工具自动运行在后台,并将数据记录到日志中。Performance Monitor为我们提供了这种便利。首先在“数据收集器集”->“用户定义”右键选择“新建->数据收集器集”(默认添加了NT Kernel和PerformanceCounter两个计数器)。然后在建好的数据收集器中添加、设置好所需的数据收集器(如图)。
这样我们就可以启动这个数据收集器集让他自动采集数据。当开始数据采集后你会发现左侧列表中在报告栏内会自动增加你这个数据集器集的报告,可以直接查看数据报告和报表或将报告导出到其他位置。
网名: |
无疆_炎戎 |
|
实名: |
姜萌 |
|
http://www.wjiangathpc.spaces.live.com/ | ||
http://www.cnblogs.com/wJiang |
最新文章
- 开博客这么久以来,第一篇技术文章,python与c的接口对接
- ajax返回值给上层函数的方法。
- 使用key链接远程Git仓库
- SQL Server中游标的使用
- 在iOS中,实现点击搜索结果隐藏搜索结果的方法。
- java基础复习之对于String对象,能够使用“=”赋值,也能够使用newkeyword赋值,两种方式有什么差别?
- css 导航条 布局
- JAVA DATE解析(时间戳解析为固定格式)
- Linux学习之echo命令
- struts2 type=";redirectAction";重定向 与动态调用方法
- city-picker插件使用-移动h5三级联动
- spring-cloud-gateway负载普通web项目
- requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?
- 【小o地图Excel插件版】不止能做图表,还能抓58、大众点评网页数据...
- 03.Regression
- 自动化测试_Mac安装python+selenium
- css 选择器、元素默认宽度、media screen
- IIS字体 404错误
- 《javascript高级程序设计》 touch事件的一个小错误
- Yii2 cache的用法(1)
热门文章
- HDU 4814 Golden Radio Base 模拟
- PHP SPL他们留下的宝石
- 关于matlab矩阵卷积conv2和傅里叶变换求卷积ifft2的关系
- SendMessage发送自定义消息及消息响应
- Android笔记之网络-基本了解
- poj 1221 UNIMODAL PALINDROMIC DECOMPOSITIONS (母函数)
- [置顶] JQuery实战总结三 标签页效果图实现
- nginx学习12 ngx_cycle_t 和 ngx_init_cycle
- .NET开源 FAQ
- oracle之spool详细使用总结(转)