zoukankan      html  css  js  c++  java
  • .NET 性能测试工具 性能计数器

    内容预告:

    • Windows内置工具(性能计数器)
    • 事件跟踪器
    • 时间分析
    • 内存分配分析
    • 内存使用量分析
    • 其他分析

    性能计数器:直接win+R运行 perfmon.exe 即可打开。可以在以下场景下使用:

    • 如果发现有内存泄露,性能计数器可以被用来检查托管还是本地内存分配的问题。Process\Private Bytes可以查看所有进程分配的private内存(包括GC堆)和.NET CLR Memory\# Bytes in All Heaps可以查看托管内存。
    • 如果ASP.NET程序有反常的行为,在ASP.NET目录下可以看详细信息,比如请求时间, 请求超时时间, 请求等待时间, 请求执行时间等计数器可以确认负载情况。Errors Total/Sec可以查看程序非正常的异常计数,各种cache可以查看缓存是否有效利用。
    • 如果WCF中严重依赖数据库并且分布式事务处理失败的话,ServiceModelService目录可以查明问题。Calls Outstanding, Calls Per Second, and Calls Failed Per Second等计数器可以定位负载,Transactions Flowed Per Second计数器报告事务数量,SQL SERVER目录的MSSQL$INSTANCENAME:Transactions 和MSSQL$INSTANCENAME:Locks可以看出事务执行的问题,比如过多的锁,以及死锁。

    自定义性能计数器的日志和警告:(笔者的电脑是win8)。步骤如下:

    1. 在性能计数器的左边,展开Data Collector Sets。
    2. 依次是User Defined -> 右键 -> new - >Data Collector Sets。
    3. 输入自定义的名称,,选择Create manually(Advanced)【手动创建(高级)】,NEXT
    4. 选择 Create Data Logs,选中Performance counter,NEXT
    5. 选择目录,NEXT
    6. 选择 Open properties for this data collector set,NEXT
    7. 继续配置其他信息,然后OK
    8. 选中刚才自定义的结点,右键-> start
    9. 即开始运行了,也可以右键->stop停止
    10. 可以通过右键Latest Report导出报告。
    11. 在结果窗口可以添加或删除计数器。

    自定义性能计数器:你可以通过.NET的System.Diagnostics.PerformanceCounter类获取性能数据。下面是需要自定性能计数器的场景:

    • 开发大型系统时,用一个基础库用来汇报性能数据,可以方便在代码级别输出性能信息。
    • 开发服务器系统时,有响应客户端请求,处理请求,返回数据的功能,应该汇报请求的处理率,错误计数等类似的统计信息做为性能信息汇报出来。
    • 开发高可靠性Windows服务且关联硬件时,应该汇报硬件的运行状况信息,以及和硬件间的交互等数据。

    下面的代码会输出一个单实例的性能计数器数据并定时更新:

    public static void CreateCategory() {
    if (PerformanceCounterCategory.Exists("Attendance")) {
    PerformanceCounterCategory.Delete("Attendance");
    }
    CounterCreationDataCollection counters = new CounterCreationDataCollection();
    CounterCreationData employeesAtWork = new CounterCreationData(
    "# Employees at Work", "The number of employees currently checked in.",
    PerformanceCounterType.NumberOfItems32);
    PerformanceCounterCategory.Create(
    "Attendance", "Attendance information for Litware, Inc.",
    PerformanceCounterCategoryType.SingleInstance, counters);
    }
    public static void StartUpdatingCounters() {
    PerformanceCounter employeesAtWork = new PerformanceCounter(
    "Attendance", "# Employees at Work", readOnly: false);
    updateTimer = new Timer(_ = > {
    employeesAtWork.RawValue = AttendanceSystem.Current.EmployeeCount;
    }, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
    }

    虽然性能计数器很不错,但是不能用在高性能的程序里。接下来介绍事件跟踪器。

  • 相关阅读:
    Virt-install用法:
    kvm笔记
    配置centos7解决 docker Failed to get D-Bus connection 报错
    linux系统下的用户文件句柄数限制
    Linux下如何通过命令检查网卡是否插上网线
    data命令详解
    cron job 里面,如何让脚本半分钟运行一次?
    bash编程之循环控制:
    bash编程之case语句,函数
    0129集训授课——面向对象思想(一):封装与抽象
  • 原文地址:https://www.cnblogs.com/icuit/p/2810295.html
Copyright © 2011-2022 走看看