Windows性能监视器_windows性能分析工具

Windows性能监视器_windows性能分析工具Windows性能监视器是一个Microsoft管理控制台(MMC)管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。启动Windows性能监视器:开始–>运行—>输入perfmon–>回车添加-保存计数器设置:在Windows2003中,添

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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>

Jetbrains全家桶1年46,售后保障稳定

用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 in all Heaps", "_Global_"));
            Console.WriteLine(GetPerfCount("SQLServer:General Statistics", "User Connections"));

            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)
        {
            PerformanceCounter counter = 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)
        {
            PerformanceCounter counter = new PerformanceCounter
            {
                CategoryName = categoryName,
                CounterName = counterName
            };
            counter.NextValue();
            Thread.Sleep(200);
            try
            {
                if (counter != null)
                {
                    return counter.NextValue();
                }
            }
            catch (Exception)
            {
                return -2f;
            }
            return -1f;
        }
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234537.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux 常用的zip压缩和解压命令详解

    Linux 常用的zip压缩和解压命令详解前言  嗨,大家好,又与大家见面了,感谢大家在2021年的陪伴,让我们在2022年继续一路前行。相信很多小伙伴在使用Linux系统中经常对文件进行或者文件夹进行操作,不像在Windows中可以使用可视化的工具对文件和文件夹进行压缩和解压操作,那么本次与大家一起学习Linux下zip和unzip的压缩和解压命令,并熟悉常用的参数介绍。常用命令  相信很多对于有一定Linux基础的小伙伴,常用的压缩有:zip、unzip、tar、gzip、bzip2等常用的命令,下面开始zip和unzip使用方法和参数详

    2022年6月7日
    41
  • h5页面 请在微信客户端打开链接_完美解决 请在微信客户端打开链接

    h5页面 请在微信客户端打开链接_完美解决 请在微信客户端打开链接原标题:完美解决请在微信客户端打开链接背景描述相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑。业务场景我这里以JMeter来举例,我们可以通过在JMet…

    2022年6月8日
    34
  • Linux rootfs_hdfs shell命令

    Linux rootfs_hdfs shell命令本文阐述Linux中的文件系统部分,源代码来自基于IA32的2.4.20内核。总体上说Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统VFS(VirtualFilesystemSwitch),三是挂载到VFS中的各实际文件系统,例如ext2,jffs等。本文侧重于通过具体的代码分析来解释Linux内核中VFS的内在机制,在这过程

    2022年9月28日
    4
  • 第 三 十 八 天:Apache 选 项 和 模 块 问 题 附:php

    第 三 十 八 天:Apache 选 项 和 模 块 问 题 附:php

    2021年9月10日
    43
  • 〖Python语法进阶篇⑩〗- 正则表达式的字符匹配「建议收藏」

    〖Python语法进阶篇⑩〗- 正则表达式的字符匹配「建议收藏」在上一章节我们对正则表达式有了一个比较宏观的认识,并且知道了正则表达式的主要功能是通过匹配规则来获取或者验证字符串中的数据。要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串。在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配。

    2022年7月14日
    22
  • 理解零拷贝_零拷贝技术

    理解零拷贝_零拷贝技术零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢? WIKI中对其有如下定义:“Zero-copy”describescomputeroperationsinwhichtheCPUdoesnotperformthetaskofcopyingdatafromonememoryareatoanother.从WIKI的定义中

    2022年9月2日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号