监视性能阈值的介绍

更新:2007 年 11 月

Windows 用来在各种系统资源上收集性能数据的机制就是“性能计数器”。Windows 包含一组预定义的性能计数器,您可以与它们进行交互;它们中有些存在于所有的 Windows 2000 计算机上,有些是为特定应用程序定制的,只存在于某些计算机上。每个计数器都与系统功能的特定区域相关。示例包括监视处理器的繁忙时间、内存使用或在一次网络连接过程中收到的字节数的计数器。可以使用 PerformanceCounter 组件的实例直接连接到现有的性能计数器,以动态方式与其数据进行交互。

性能计数器监视计算机上“性能对象”的行为。这些对象包括如处理器、磁盘和内存之类的物理组件以及如进程和线程之类的系统对象。在 Visual Studio 和 Windows 软件开发工具包 (SDK) 中,这些性能对象按类别显示;与同一个性能对象相关的系统计数器将分组到指明其共同点的类别中。在创建 PerformanceCounter 组件的实例时,首先指示该组件将与之交互的类别,然后从该类别中选择要与之交互的计数器。

例如,Windows 上的一种计数器类别是“内存”类别。该类别中的系统计数器跟踪如可用字节和缓存字节等数据。要处理应用程序中的缓存字节,首先应创建 PerformanceCounter 组件的实例,再将它连接到“内存”类别,然后从该类别中选取适当的计数器(在此例中为“Cached Bytes”)。

在某些情况下,类别进一步细分到实例。实例跟踪关于类别相关对象的多个匹配项的数据。一定要注意,实例是应用到作为一个整体的类别,而不是单个的计数器。一个类别中的所有计数器都有为该类别定义的每个实例。例如,“进程”类别包含称为“空闲”和“系统”的两个实例。“进程”类别中的每个计数器都用这两种方式指定数据,显示关于空闲进程或系统进程的信息。类别和计数器的结构如下所示:

类别、实例和计数器

Visual Basic 类别实例

如您所见,“进程”类别包含两个实例,所以该类别中的两个计数器也都包含“空闲”和“系统”实例。有关实例的更多信息,请参见 如何:添加和移除性能计数器实例

尽管系统能够提供很多类别的计数器供您使用,但您可能与之交互最频繁的默认类别包括:“缓存”、“内存”、“对象”、“物理磁盘”、“处理器”、“服务器”、“系统”和“线程”类别。

性能计数器数据

性能计数器记录关于系统各个部分的值。这些值不是作为项存储,而是只要句柄对于内存中的给定类别处于打开状态,这些值就一直保持。从性能计数器中检索数据的过程称为“取样”。取样时,您或者检索计数器的即时值,或者检索计算值。

根据计数器定义方式的不同,它的值可能反映的是最近的资源利用情况,又称“瞬时值”,也可能是上两次度量值在两次样本之间的那段时间内的平均值。例如,如果从“进程”类别的“线程计数”计数器检索值,您检索的是特定进程上次度量所得的线程数。这就是即时值。但是,如果检索“内存”类别的“页/秒”计数器,您就是根据上两次取样期间所检索的平均内存页数检索每秒的速率。

根据一天的不同时间所进行的工作,资源占用变化惊人。因此,显示一段时间间隔内的占用率的性能计数器相对即时计数器值的平均值而言,是个更有意义的度量。平均值也许会包括服务启动或其他事件的数据,而这些事件可能导致数字在短时间内远远超出范围,从而引起结果扭曲。

PerformanceCounter 组件可满足最常见的 Windows 性能监视要求,即连接到服务器上的现有计数器,在其中读取和写入值。其他功能(如复杂的数据建模)可直接通过“Windows 性能监视器”来完成。例如,可以使用“性能监视器”完成以下任务:以图表形式表示计数器所包含的数据,绘制数据报表,设置警报,以及将数据保存到日志中。

在 .NET 应用程序中使用性能计数器

使用 PerformanceCounter 组件,您既可以连接到您能够访问的服务器上安装的现有计数器,也可以创建自己的自定义性能计数器。您可以从任何计数器中读取数据,也可以向自己的自定义计数器中写入数据。

要连接到现有的性能计数器,必须指定计数器所在的计算机、计数器的类别以及计数器的名称。此外,如果计数器包含不止一个实例,还可以选择要使用的计数器实例。然后就可以从该计数器中读取任何数据。还可以通过使用代码来枚举计算机上现有的类别、计数器和实例,或者使用“服务器资源管理器”来查看计算机上的现有计数器列表。

创建新的计数器时,必须为本地计算机指定一个全新的类别。不可以将新的计数器添加到现有的类别,也不可以在远程计算机上创建新的计数器。但是可以在创建的任何自定义计数器中写入和读取数据。

可以在“服务器资源管理器”中展开“性能计数器”节点,查看存在于该服务器上的计数器列表(按类别)以及作为其分类依据的实例。还可以从“服务器资源管理器”中将特定性能计数器或实例拖到 Microsoft Visual Studio 中的组件设计器,以创建 PerformanceCounter 组件的实例,该实例会自动设置其属性以指向选定的计数器。

如果正在 ASP.NET 应用程序中使用 PerformanceCounter 组件,ASPNET 用户帐户的默认设置将限制对性能计数器的访问。默认情况下,ASPNET 用户帐户可以写入性能计数器,但不能从中读取,并且该帐户不能创建新类别。您可使用 ASPNET 帐户模拟,从而允许创建新类别。模拟身份必须具有足够的特权才能创建类别。如果应用程序需要可在部署前指定的性能计数器,则这些性能计数器可以由部署项目来创建。有关更多信息,请参见 ASP.NET Web 应用程序安全性

说明:

通过右击“性能计数器”节点并选择适当的菜单命令,可以在“服务器资源管理器”中创建新的计数器类别。还可以编辑现有类别,方法是右击其特定节点。

有关更多信息,请参见服务器资源管理器/数据库资源管理器

限制

此版本中,在创建自定义性能计数器时,可能必须重新启动安装在 Windows 2000 上的性能监视器 (Perfmon.exe),才能在该应用程序中看到自定义计数器。

Microsoft Windows NT 4.0 版不完全支持 PerformanceCounter 类。您可从系统计数器中读取,但不能创建、写入或删除自定义计数器。

请参见

概念

性能计数器数据分析

性能计数器编程结构

性能计数器生存期

性能计数器类型