Windows 性能监视器概述

Windows 性能监视器概述

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

启动 Windows 性能监视器:开始-->运行—>输入perfmon-->回车

添加-保存计数器设置:
 

在Windows 2003中,添加完计数器后,直接按Ctrl+S,就能将设置保存为文件的形式,方便下次直接查看,在Win7中来的不那么直接。

开始-->运行-->输入MMC-->文件-->添加/删除管理单元-->选择性能监视器-->添加,然后在性能(本地)中来添加你的计数器,这样就可以保存了,方便下次查看。

运行截图:

常用的监视计数器:

对象

计数器

说明

.NET CLR Exceptions

# of Exceps Thrown / sec

显示每秒钟抛出的异常数。这包括 .NET 异常和转换为 .NET 异常的未受管异常。性能随此数目的增大而下降。

.NET CLR Memory

# Bytes in all Heaps

显示其他四个计数器的总和:Gen 0 堆大小、Gen 1 堆大小、Gen 2 堆大小以及大对象堆大小。此计数器表示 GC 堆上当前分配的内存(以字节为单位)。此计数器的值总是比 Process\Private Bytes 的值小,Process\Private Bytes 对进程的 MEM_COMMIT 区域进行计数。Private Bytes minus # Bytes in all Heaps 就是由未受管对象提交的字节数。
用于监视可能的内存泄漏,或者监视受管或未受管对象的内存使用率是否过大。

.NET CLR Remoting

Remote Calls/sec

显示每秒调用的远程过程调用的数目。远程过程调用是对调用方所在应用程序域之外的任何对象的调用。此计数器不是一段时间内的平均值;它显示最近两个样本观测值的差除以取样间隔所得的结果。

.NET Data Provider for Oracle

NumberOfFreeConnections

连接池中可用连接的数量。

.NET Data Provider for SqlServer

NumberOfFreeConnections

连接池中可用连接的数量。

Process

% Processor Time

显示所有进程线程用于执行指令的已用处理器时间的百分比。指令是计算机中的基本执行单位;线程是执行指令的对象;进程是运行程序时创建的对象。此计数中包含了处理某些硬件中断和陷阱条件时执行的代码。如果总的处理器时间较长,请使用此计数器确定导致 CPU 利用率很高的进程。

Process

Handle Count

显示此进程当前打开的句柄的总数。此数字是此进程中的每个线程当前打开的句柄总数。特定进程中句柄计数的增加可能是发生句柄泄漏的错误进程的症状,这将导致服务器上发生性能问题。此问题并不一定会出现,但是在一段时间内对其进行监视以确定是否发生句柄泄漏十分重要。

Process

Thread Count

这个进程中正在活动的线程数目。指令是在处理器中基本的执行单位,线程是指执行指令的对象。每个运行的进程至少有一个线程。

SQLServer:General Statistics

User Connections

显示sqlserver目前连接的数量,而不是用户数。如果该计数器超过255,那么你需要将sqlserver的"Maximum Worker Threads" 的配置值设置得比缺省值255高。如果连接的数量超过可用的线程数,那么sqlserver将共享线程,这样会影响性能。"Maximum Worker Threads"需要设置得比你服务器曾经达到的最大连接数更高。

SQLServer:Locks

Number of Deadlocks/sec

死锁的数量/秒,死锁对应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器的值必须为0。

LogicalDisk

% Free Space

% Free Space 是所选逻辑磁盘驱动器上总计可用空间所占的百分比。

PhysicalDisk

Disk Read Bytes/sec

指在读取操作时从磁盘上传送字节的速率。

PhysicalDisk

Disk Write Bytes/sec

指在写入操作时传送到磁盘上的字节速度。

默认状况下,以下两个计数器的开关是关着的,需要配置下%WINDIR%\microsoft.net\Framework64\v2.0.50727\CONFIG\machine.config如下开关的(32和64位操作系统的路径也有不同),否则数据采集不到。

.NET Data Provider for Oracle

NumberOfFreeConnections

.NET Data Provider for SqlServer

NumberOfFreeConnections

增加配置,并重启相应的进程(重启服务,或者是重启IIS等)

<system.diagnostics>

  <switches>

    <add name="ConnectionPoolPerformanceCounterDetail"value="4"/>

  </switches>

</system.diagnostics>

用C#采集计数器的数据:

虽然Windows自带了perfmon工具,并可以生成报告以及以各种方式查看过去的性能数据,但是有时候我们还是定义自己的一些曲线或者报表,那么就需要将性能监视器的数据收集起来,C#提供了PerformanceCounterCategory(性能对象),PerformanceCounter(性能计数器组件)两个类,提供了操作性能监视器的一些方法,这样我们就能把数据读取出来保存到数据库中或者文件中,可用来随意产生一些曲线或报表,或者报警Mail等。。。

示例代码:

using System;

using System.Diagnostics;

using System.Threading;

 

namespace TestApplication

{

    public class Program

    {

        static void Main(string[] args)

        {

           Console.WriteLine(GetPerfCount("Process", "% Processor Time", "_Total"));

            Console.WriteLine(GetPerfCount(".NET CLR Memory", "# Bytes inall Heaps", "_Global_"));

           Console.WriteLine(GetPerfCount("SQLServer:GeneralStatistics", "UserConnections"));

 

            Console.Read();

        }

 

        /// <summary>

        /// 获取计数器样本并为其返回计算所得值--有实例的计数器(对于大多数的计数器)

        /// </summary>

        /// <param name="categoryName"></param>

        /// <param name="counterName"></param>

        /// <param name="instance"></param>

        /// <returns></returns>

        public static float GetPerfCount(string categoryName, string counterName, string instance)

        {

            PerformanceCountercounter = new PerformanceCounter

            {

                CategoryName =categoryName,

                CounterName =counterName,

                InstanceName = instance,

                MachineName = ".",

                ReadOnly = true

            };

            counter.NextValue();

            Thread.Sleep(200);

            try

            {

                if (counter != null)

                {

                    return counter.NextValue();

                }

            }

            catch (Exception)

            {

                return -2f;

            }

            return -1f;

        }

 

        /// <summary>

        /// 获取计数器样本并为其返回计算所得值--无实例的计数器

        /// 比如categoryName=SQLServer:General Statistics,counterName=User Connections

        /// </summary>

        /// <param name="categoryName"></param>

        /// <param name="counterName"></param>

        /// <returns></returns>

        public static float GetPerfCount(string categoryName, string counterName)

        {

            PerformanceCountercounter = new PerformanceCounter

            {

                CategoryName =categoryName,

                CounterName =counterName

            };

            counter.NextValue();

            Thread.Sleep(200);

            try

            {

                if (counter != null)

                {

                    return counter.NextValue();

                }

            }

            catch (Exception)

            {

                return -2f;

            }

            return -1f;

        }

    }

}

 

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值