编写高性能 .NET 代码 第一章:工具介绍 -- Performance Counters(性能计数器)

Performance Counters(性能计数器)

性能计数器是监视应用程序和系统性能的最简单的方法之一。它有几十个类别数百个计数器在,包括一些.net特有的计数器。要访问这些可以通过系统自带的 性能监控程序(perfmon.exe)来实现。

图1-2。是PerfMon的主要窗口,它显示一个小的时间段内处理器计数器。垂直线表示当前实例,默认情况下100秒钟后图形将换行。

图1-3。这是很多类别里的其中一个计数器,还显示了适用这个计数器的应用实例。

每个计数器都有一个类别和一个名称。 很多计数器还可以选择对应的进程。 例如,对于Process类别中的%Processor Time计数器,实例可以是各种进程。 一些计数器还具有元实例,例如_Total或 ,它实际上是所有实例上的汇总值。

后面的很多章节将详细介绍相关主题对应的计数器。几乎每个Windows子系统都有对应的性能计数器,这些计数器通常适用于每个程序。
但是,在继续之前,您应该熟悉一些基本的操作系统相关的计数器:

• Physical Memory—The actual physical memory chips in a computer. Only the operating system manages physical memory directly.

• Virtual Memory—A logical organization of memory in a given process. Virtual memory size can be larger than physical memory. For example, 32-bit programs have a 4 GB address space, even if the computer itself only has 2 GB of RAM. Windows allows the program to access only 2 GB of that by default, but all 4 GB is possible if the executable is large-address aware. (On 32-bit versions of Windows, large-address aware programs are limited to 3 GB.) As of Windows 8.1 and Server 2012, 64-bit processes have a 128 TB process space, far larger than the 4 TB physical memory limit. Some of the virtual memory may be in RAM while other parts are stored on disk in a paging file. Contiguous blocks of virtual memory may not be contiguous in physical memory. All memory addresses in a process are for the virtual memory.

• Reserved Memory—A region of virtual memory address space that has been reserved for the process and thus will not be allocated to a future requester. Reserved memory cannot be used for memory allocation requests because there is nothing backing it—it is just a description of a range of memory addresses.
•Committed Memory—A region of memory that has a physical backing store. This can be RAM or disk.
•Page—An organizational unit of memory. Blocks of memory are allocated in a page, which is usually a few KB in size.

• Paging—The process of transferring pages between regions of virtual memory. The page can move to or from another process (soft paging) or the disk (hard paging). Soft paging can be accomplished very quickly by mapping the existing memory into the current process’s virtual address space. Hard paging involves a relatively slow transfer of data to or from disk. Your program must avoid this at all costs to maintain good performance.

• Page In—Transfer a page from another location to the current process.

• Page Out—Transfer a page from the current process to another location, such as disk.

• Context Switch—The process of saving and restoring the state of a thread or process. Because there are usually more running threads than available processors, there are often many context switches per second.

• Kernel Mode—A mode that allows the OS to modify low-level aspects of the hardware’s state, such as modifying certain registers or enabling/disabling interrupts. Transitioning to Kernel Mode requires an operating system call, and can be quite expensive.

• User Mode—An unprivileged mode of executing instructions. There is no ability to modify low-level aspects of the system.

以上的我翻译过一次,感觉都不通常,所以还是不翻了,懂的看前面单词就知道什么意思,不懂的百度一下也就知道了。

以下是我将在整本书中使用的一些计数器,特别是在第2章讨论垃圾回收时。 当然如果你想了解相关主题的更多信息,请查看专门介绍操作系统的书,如Windows Internals。 (见附录C中的参考书目)
以下的计数器内容涵盖了进程常用的计数器,它可以详细记录每个进程的数据:

• % Privileged Time—Amount of time spent in executing privileged (kernel mode) code.

• % Processor Time—Percentage of a single processor the application is using. If your application is using two logical processor cores at 100% each, then this counter will read 200.

• % User Time—Amount of time spent in executing unprivileged (user mode) code.

• IO Data Bytes/sec—How much I/O your process is doing.

• Page Faults/sec—Total number of page faults in your process. A page fault occurs when a page of memory is missing from the current working set. It is important to realize that this number includes both soft and hard page faults. Soft page faults are innocuous and can be caused by the page being in memory, but outside the current process (such as for shared DLLs). Hard page faults are more serious, indicating data that is on disk but not currently in memory. Unfortunately, you cannot track hard page faults per process with performance counters, but you can see it for the entire system with the Memory\Page Reads/sec counter. You can do some correlation with a process’s total page faults plus the system’s overall page reads (hard faults). You can definitively track a process’s hard faults with ETW tracing with the Windows Kernel/Memory/Hard Fault event.

• Pool Nonpaged Bytes—Typically operating system and driver allocated memory for data structures that cannot be paged out such as operating system objects like threads and mutexes, but also custom data structures.

• Pool Paged Bytes—Also for operating system data structures, but these are allowed to be paged out.
Private Bytes—Committed virtual memory private to the specific process (not shared with any other processes).

• Virtual Bytes—Allocated memory in the process’s address space, some of which may be backed by the page file, shared with other processes, and memory private to the process.

• Working Set—The amount of virtual memory currently resident in physical memory (usually RAM).

• Working Set-Private—The amount of private bytes currently resident in physical memory.

• Thread Count—The number of threads in the process. This may or may not be equal to the number of .NET threads. See Chapter 4 (Asynchronous Programming) for a discussion of .NET thread-related counters.

根据应用还有一些有用的分类。 您可以使用PerfMon来探索在这些特别的分类。

• IPv4/IPv6—Internet Protocol-related counters for datagrams and fragments.

• Memory—System-wide memory counters such as overall paging, available bytes, committed bytes, and much more.

• Objects—Data about kernel-owned objects such as events, mutexes, processes, threads, semaphores, and sections.

• Processor—Counters for each logical processor in the system.

• System—Context switches, alignment fixes, file operations, process count, threads, and more.

• TCPv4/TCPv6—Data for TCP connections and segment transfers

还是那句话,我翻译过一遍发现太丑陋了就不放出来了,特别是当我翻译完下面的文字的时候。

令人惊讶的是,在互联网里没有找到关于性能计数器的详细介绍,但幸运的是,PrefMon自己有完善的记录,在PrefMon工具里的“添加计数器”对话框中,可以选中底部的“显示描述”框以突出显示计数器的详细信息。

你说你不是坑爹吗,你既然都有描述说明了,干嘛不直接开放出来,非得点勾选一个选项才出来。

PrefMon还能够设置时间定时启动性能计数器,并存储在日志中供以后查看,甚至在计数器超过阈值时执行自定义操作。它不仅限于性能计数器数据的收集,还可以收集系统配置数据和ETW事件数据。

让我们启动性能监视器,设置一次数据收集器

  1. 展开“数据收集器集”树

  2. 右键单击“用户定义”

  3. 选择“新建”

  4. 选择“数据收集器集”

5.给它一个名称,选中“手动创建(高级)”,然后单击下一步

6.检查“创建数据日志”下的性能计数器框,然后单击下一步

7.单击添加以选择要包括的计数器

8.单击下一步设置要存储日志的路径,然后单击下一步直到选择结束

完成后,您可以打开收集器的属性,并设置收集计划。也可以通过右键单击作业节点并选择开始来手动运行。 这将创建一个报表(应该是文件吧),可以通过在主树视图中的“报告--用户定义”下节点来查看。

图1-7。 已保存的报告文件。 使用工具栏按钮将视图更改为收集时的计数器数据的图形。

要创建警报,请执行相同的过程,在向导中选择“性能计数器警报”选项。
使用此处描述的功能可能需要执行性能计数器所需的一切,但如果要采取控制或创建自己的计数器,请参阅第7章(性能计数器)了解详细信息。 您应该将性能计数器分析视为应用程序的所有性能工作的基准。

相关文章:

  • [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 选择什么来衡量

  • [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比

  • [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio

原文地址:http://www.cnblogs.com/yahle/p/6531297.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EF通用数据层封装类(支持读写分离,一主多从)

浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,ServiceStack.OrmLite 等。当然每种orm都有各自的优势,也有不足…

前端进行时间段筛选

传给后端参数时进行格式化 weekResultTimeStart:params.insertTime!null?moment(params.insertTime[0]).format(YYYY-MM-DD HH:mm:ss):null,weekResultTimeEnd:params.insertTime!null?moment(params.insertTime[1]).format(YYYY-MM-DD HH:mm:ss):null,注意点: 前…

IdentityServer4(OAuth2.0服务)折腾笔记

以下,称这个使用了IdentityServer4的OAuth2.0服务的项目称为Passport项目。 组件说明(Nuget) Passport项目所需组件 项目以Asp.net Core Identity项目模板初始化,集成IdentityServer4中间件;集成IdentityServer4.AspN…

map遍历进行展示

{userList.map((item,index)> <Option key{index} value{item.userId}>{item.realName||null}</Option>)||null}

Javase基础

Javase基础1.XML文档作用 保存和传输数据 类如&#xff1a; <标题> 标题 </标题> 2.Java的特性优势&#xff08;编译型语言和解释性语言&#xff09; 1.安全 2.面向对象 3.简单性&#xff08;C&#xff09; 4.高性能 5.分布式 6.多线程 7.高并发 8.跨平台 可移植性…

LocalDateTime与LocalDate之间的相互转换

LocalDateTime转换为LocalDate和LocalTime LocalDate转为LocalDateTime

DDD领域驱动之干货 (一)

说道DDD不得不说传统的架构与DDD的架构区别。 传统的架构不外乎就是三层&#xff0c;而在这三层里面又不断的细分&#xff0c;始终没有达到想要的效果&#xff0c;那么为什么当时还是采用三层。 当然在DDD没有提出的时候三层是大多数人的选择。 那么当领域驱动被提出来的时候…

第十三章 常用类(Math 类、Arrays 类、System类、Biglnteger 和BigDecimal 类、日期类)

一、Math 类&#xff08;P481&#xff09; Math 类包含&#xff0c;用于执行基本数学运算的方法&#xff0c;如初等指数、对数、平方根和三角函数。 &#xff08;1&#xff09;abs&#xff1a;绝对值 &#xff08;2&#xff09;pow&#xff1a;求幂 &#xff08;3&#xff09;c…

实体类为什么要用包装类而不用基本类型

eg 基本类型默认为有值的 用包装类不传值得是否默认为空 mybatisplus进行操作时更容易进行是否非空的判断

Asp.Net Core轻量级Aop解决方案:AspectCore

什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect-oriented programming) 解决方案&#xff0c;它更好的遵循Asp.Net Core的模块化开发理念&#xff0c;使用AspectCore可以更容易构建低耦合、易扩展的Web应用程序。AspectCore使…

指定查找区间,查找学生姓名并显示是否修改成功

首先需要创建两个类&#xff08;面向对象OO的方式实现&#xff09;&#xff1a; 一个是Student&#xff0c;该类主要的代码&#xff1a; String [] names new String [5]; //指定位置查找学生信息public boolean select(int start,int end,String name){boolean flag false;…

去 BAT 面试,总结了这 55 道 MySQL 面试题

转载自 去 BAT 面试&#xff0c;总结了这 55 道 MySQL 面试题 1、一张表&#xff0c;里面有ID自增主键&#xff0c;当insert了17条记录之后&#xff0c;删除了第15,16,17条记录&#xff0c;再把Mysql重启&#xff0c;再insert一条记录&#xff0c;这条记录的ID是18还是15 &am…

使用DotNetty编写跨平台网络通信程序

长久以来,.Net开发人员都非常羡慕Java有Netty这样&#xff0c;高效&#xff0c;稳定又易用的网络通信基础框架。终于微软的Azure团队&#xff0c;使用C#实现的Netty的版本发布。不但使用了C#和.Net平台的技术特点&#xff0c;并且保留了Netty原来绝大部分的编程接口。让我们在使…

Mybatisplus查找数据库中表的策略和id自增策略

默认根据类名向数据库中查找对应的表的名字 加注解自己指定

java中实现客户姓名添加和显示

java中使用带参的方法实现对学生姓名的添加和显示&#xff1a; 首先我们创建一个名为Student类的学生类&#xff0c;由于需要添加多个学生信息&#xff0c;那么我们就先在Student类中声明一个存放学生姓名的数组&#xff1a; String [] names new String[10];然后就是添加学生…

C#码农的大数据之路 - 使用C#编写MR作业

写在前面 从Hadoop出现至今&#xff0c;大数据几乎就是Java平台专属一般。虽然Hadoop或Spark也提供了接口可以与其他语言一起使用&#xff0c;但作为基于JVM运行的框架&#xff0c;Java系语言有着天生优势。而且能找到的与大数据框架如Hadoop等使用介绍的文章也都以Java语言作…

.net Core 生产环境 KestrelServer + Shell 实践

1、背景描述 原项目部署在windwos 服务器下的windwos 服务程序。 2、现已经改版为Linux Centos 下的服务程序。 环境说明&#xff1a; 服务器系统&#xff1a;CentOS 7.0 相关工具&#xff1a;Xshel、Xftp 服务器软件软件&#xff1a;.netcore、 1.安装 CentOS 测试环境…

mysql中ifnull函数

当里面的参数为null时使用第二个参数&#xff0c;否则使用第一个参数