Windows 性能监视器是一个很好用的自带监视工具,对于一些基本简单的监视需求可以轻松满足。本文主要总结了一下如何将自己应用中的一些性能数据暴露到性能监视器上方便管理。

什么?不知道什么是Windows性能监视器?

“Microsoft 管理控制台 (MMC) 管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。” - MSDN[1]

使用场景

需要记录自己开发的应用中一些性能方面的数据,比如说我有一个 WCF的应用,我需要记录下来每分钟应用处理的请求数量,请求的平均处理时间。通过这些数据可以用来对应用进行监控,也可以进行一些分析。如果将这些数据储存成自己的形式将会带来很多其他的工作,如果暴露给性能监视器的话就要简单很多。

使用方法

关键类型:

PerformanceCounterCategory:这个对应着监视器上的一个组,可以包含很多个计数器( Counter)

CounterCreationData:定义计数器的名称和一些帮助字符串的类,主要是在创建的时候用到。

PerformanceCounterType:每一个计数器都需要制定一个类型,这个枚举提供了所有的计数器类型。参考 MSDN可以看到每一个类型的适用范围以及这个类型的计算公式。[3]

PerformanceCounter:这个是真正去暴露数据的类型,通过这个类型我们可以将我们统计到的数据暴露给性能监视器。

步骤:

写了一个例子用来记录操作总数。

一、 创建自定义类型并添加到系统中:


private const string CategoryName = "Sample Category";
private const string CategoryHelp = "This is just a sample Category";
private const string TotalOperationName = "Total Operation Counter";
private const string TotalOperationHelp = "Count of Total Operation";

//检测系统中是否已经存在这个类别

//如果需要修改这个类别里面的内容的话就需要删除重新添加这里删除是为了

if (PerformanceCounterCategory.Exists(CategoryName))

    PerformanceCounterCategory.Delete(CategoryName);

//创建你需要的计数器

CounterCreationDataCollection collection = new CounterCreationDataCollection();

CounterCreationData totalOperation =

    new CounterCreationData(TotalOperationName, TotalOperationHelp, PerformanceCounterType.NumberOfItems32);

collection.Add(totalOperation);

//调用Create 方法在你本地电脑注册这个计数器类别以及其中的一些计数器

PerformanceCounterCategory.Create(CategoryName,

                                    CategoryHelp,

                                    PerformanceCounterCategoryType.SingleInstance,

                                    collection);

注意点:

1. 强烈建议在应用安装或者部署的时候创建计数器类别,而不是在运行时进行添加。因为如果运行时添加的话可能性能监视器来不及刷新,从而导致出错。[2]

2. 创建计数器类别需要管理员权限,这也从另一个方面说明最好在安装或者部署的时候创建,因为极有可能运行的时候是没有管理员权限的。

3. 选择PerformanceCounterType的时候最好去MSDN上去找一个最适合你需求的那个类型。[3]

二、运行时创建PerformanceCounter

PerformanceCounter m_totalOperationCounter = new PerformanceCounter(CategoryName, PerformanceCounterTotalOperationName, false);

注意点:

1. 通过类别名和计数器名从系统中找到之前我们注册过的计数器,最后一个参数设为false因为我们需要进行写操作。

2. 这个类除了可以用来写计数器以外还可以从系统中读取某一个指定的计数器,比如说CPU的使用率,内存使用率等数据。

3. 除了可以从本地电脑读取性能参数以外,还可以从局域网中的其他电脑中读取数据。

三、写入数据

运行时根据自己的需要去改变那个计数器,可以通过调用Increment等方法对计数器进行自增,也可以直接给RawData进行赋值(但是要注意线程安全)

for (int i = ; i < ; i++)

{

    //这是我自己封装的一个方法

    PerfCounterSample.Instance.IncreaseOpCounter();

    //模拟处理

    Thread.Sleep(new Random().Next());

}
public void IncreaseOpCounter() { m_totalOperationCounter.Increment(); }

还有另一种比较好的方式就是不直接操作计数器,而是将数据记录在一个地方,然后定时的去刷新到计数器中。

for (int i = ; i < ; i++)
{
count++;
//模拟处理
Thread.Sleep(new Random().Next());
}
Timer m_Timer = new Timer();
m_Timer.AutoReset = true;
m_Timer.Interval = 1000.0;//1 Second
m_Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
m_Timer.Start();
void Timer_Elapsed(object sender, ElapsedEventArgs e)

{
lock (m_totalOperationCounter)
{
m_totalOperationCounter.RawValue = count;
}
}

注意点:

1. 我觉得这里主要是要注意线程安全和这个最终计数器数值的运算方式(这个要看你的需求啦)。

四、在性能监视器中添加我们的计数器

首先运行程序去系统中注册我们的计数器,然后打开性能监视器将我们的计数器加到监视列表中。

大功告成啦!

示例代码:

Reference:

1. MSDN,Windows 性能监视器概述

2. MSDN,PerformanceCounterCategory.Create

3. MSDN,PerformanceCounterType 枚举

自定义Windows性能监视器的更多相关文章

  1. 用windows性能监视器监控sqlserver的常见指标

    用windows性能监视器监控sqlserver的常见指标   上边文章中提到win的性能监视器是监控数据库性能必备的工具,接下来我就给大家介绍一些常见的监控指标,其实无非就是磁盘,cpu,内存等硬件 ...

  2. Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)

    [转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...

  3. Windows 性能监视器的基本指标(CPU,内存,硬盘参数)

    转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的 ...

  4. zabbix3.4.7利用Windows性能监视器监控各项资源指标

    zabbix自带的windows监控模板并没有监控windows cpu使用率的监控 在cmd命令的窗口输入perfmon,就会弹出一下界面 点击性能监视器 点击如图加号,出现很多参数 选择proce ...

  5. Windows性能监视器

    前端时间在做动态目标监控,应用程序需要考虑大数据量和多用户并发的操作,系统的性能是解决方案实施性的重要度量.这里简单的记录下Windows中性能监视查看和简单分析. 一般操作系统性能主要涉及到的问题主 ...

  6. windows性能监视器的使用

    https://blog.csdn.net/ab7434588/article/details/53023799 一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统 ...

  7. Zabbix利用Windows性能监视器监控各项资源指标

    zabbix自带的windows监控模板并没有监控windows cpu使用率的监控 在cmd命令输入perfmon 打开后默认就一项CPU占用的监控,下面以添加硬盘空闲时间做示例 1:监控图形上面右 ...

  8. windows 性能监视器常用计数器

    转载地址:https://www.jianshu.com/p/f4406c29542a?utm_campaign=maleskine&utm_content=note&utm_medi ...

  9. 用windows性能监视器检测sqlserver 常见指标

    转载地址:https://www.cnblogs.com/xdong/p/4296072.html

随机推荐

  1. Queue、进程、线程、协程

    参考博客地址 http://www.cnblogs.com/alex3714/articles/5230609.html 1.python GIL全局解释器锁 python调用的操作系统的原生线程,当 ...

  2. kindeditor编辑器的使用

    KindEditor是一款用Javascript编写的开源在线HTML编辑器,主要用户是让用户在网站上获得可见即可得的编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(texta ...

  3. c#中获取数组的行列个数的方法

    GetUpperBound可以获取数组的最高下标.GetLowerBound可以获取数组的最低下标.这样就可以实现对数组的遍历//定义二维数组string[,] myStrArr2=new strin ...

  4. [转载] 1. JebAPI 之 jeb.api

    本文转载自: https://www.zybuluo.com/oro-oro/note/142707 JEB API 官方地址:https://www.pnfsoftware.com/apidoc/  ...

  5. iOS 设置button文字过长而显示省略号的解决办法

    UIButton * button =[UIButton buttonWithType:UIButtonTypeCustom];button.titleLabel.adjustsFontSizeToF ...

  6. arm上的参数列表传递的分析(以android为例)

    1. Linux中可变列表实现的源码分析 查看Linux0.11的内核源代码,对va_list, va_start, va_arg 的实现如下: va_list的实现没有差别,chartypedef ...

  7. linux shell 脚本攻略学习19--sed命令详解

    sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...

  8. Block的copy和循环引用的问题

    在实际开发中,发现使用Block有着比delegate和notification更简洁的优势.于是在目前的项目中大量的使用block. 在我的头文件我是这样声明使用block的. 我将block声明为 ...

  9. zabbix使用host metadata方式主动注册

    host metadata是zabbix2.2新增加的功能,该功能在zabbix-agent端可以自定义条件,在选择自动注册的时候,zabbix-server端可以根据host metadata来选择 ...

  10. hdu 5818 (优先队列) Joint Stacks

    题目:这里 题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个 ...