性能计数器解释
如果Process\Private Bytes计数器和Process\Working Set计数器的值持续升高
同时Memory\Available bytes计数器的值却持续降低的话
说明很有可能是存在内存泄露
windows 自带的Performance Monitor,控制面版->管理工具->性能
检测内存泄露,我们一般可以监视Process对象的Handle Count,Virutal Bytes 和Working Set三个Counter。Handle Count记录了进程当前打开的HANDLE的个数,监视这个Counter有助于我们发现程序是否有Handle泄漏;Virtual Bytes记录了该进程当前在虚地址空间上使用的虚拟内存的大小,NT的内存分配采用了两步走的方法,首先,在虚地址空间上保留一段空间,这时操作系统并没有分配物理内存,只是保留了一段地址。然后,再提交这段空间,这时操作系统才会分配物理内存。所以,Virtual Bytes一般总大于程序的Working Set。监视Virutal Bytes可以帮助我们发现一些系统底层的问题; Working Set记录了操作系统为进程已提交的内存的总量,这个值和程序申请的内存总量存在密切的关系,如果程序存在内存的泄漏这个值会持续增加,但是Virtual Bytes却是跳跃式增加的。
性能对象 | 计数器 | 描述 |
Processor使用 | %Processor Time(所有实例) | 指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在每个范例间隔中衡 量处理器用于执行闲置处理线程的时间,并且用 100% 减去该值得出。(每 台处理器有一个闲置线程,该线程在没有其它线程可以运行时消耗周 期)。可将其视为范例间隔用于做有用工作的百分比。这个计数器显 示在范例间隔时所看到的忙时平均值。这个值是用 100% 减去该服务不活 动的时间计算出来的。 |
Processor瓶颈 | Interrupts/sec | 指处理器每秒钟接收并维护的硬件中断的平均值。它不包括 DPC,DPC 将单独计算。这个值是产生中断的设备(如:系统时钟、鼠标、磁盘驱动器、数据交流线路、网络街面卡和其它附件设备)的活动的间接指示器,这些设备通常在完成了一项任务或需要注意时中断处理器。正常的线程操作在中断时悬停。大多数的系统时钟每隔 10 毫秒中断处理器一次,形成了间隔活动的后台。这个计数值显示用上两个实例中观察到的值之间的差除于实例间隔的持续时间所得的值。 |
System/Processor Queue Length(所有实例) | 是指处理列队中的线程数。即使在有多个处理器 的计算机上处理器时间也会有一个单列队。不象磁盘计数器,这个计数器仅 计数就绪的线程,而不计数运行中的线程。如果处理器列队中总是有两个以上的线程 通常表示处理器堵塞。这个计数器仅显示上一次观察的值;而不是一个平 均值。 | |
System/Context Switches/sec | 指计算机上的所有处理器全都从一个线程转换到另一个线程的综合速率。当正在运行的线程自动放弃处理器时出现上下文转换,由一个有更高优先就绪的线程占先或在用户模式和特权(内核)模式之间转换以使用执行或分系统服务。它是在计算机上的所有处理器上运行的所有线程的Thread: Context Switches/sec 的总数并且用转换数量衡量。在系统和线程对象上有上下文转换计数器。这个计数值显示在上一次两个实例中观察到的值除于实例间隔的持续时间所得的值的差异。 | |
Process (进程) | Private Bytes | 指这个处理不能与其它处理共享的、已分配的当前 字节数。 |
Virtual Bytes | 指处理使用的虚拟地址空间的以字节数显示的当前大小。 使用虚拟地址空间不一定是指对磁盘或主内存页的相应的使用。虚 拟空间是有限,如果使用过多,可能会限制处理加载数据 库的能力。 | |
Working Set | 指这个处理的 Working Set 中的当前字节数。 Working Set 是在处理中被线程最近触到的那个内存页集。如果 计算机上的可用内存处于阈值以上,即使页不在使用中,也会留在一 个处理的 Working Set中。当可用内存降到阈值以下,将从 Working Set 中删除页。如果需要页时,它会在离开主内存前软故障返回 到 Working Set 中。 | |
Handle Count | 由这个处理现在打开的句柄总数。这个数字是在这个处理中每个线程当前打开的句柄的总数。 | |
Objects | Threads | 线程指在数据收集时在计算机中线程的数目。请注意这是 一个即时计算而不是一个时间间隔的平均值。一个线程为一个基本 的可执行实体,该实体在处理器中执行指令。 |
Memory使用 | Available Bytes | 是计算机上可用于运行处理的有效物理内存的字节数量。是用零、 空闲和备用内存表上的空间总值计算的。空闲内存指可以使用内存;零内存指为了防 止以后的处理看到以前处理使用的数据而在很多页内存中充满了零的内存。备用内 存是指从处理的工作集(它的物理内存)移到磁盘的,但是仍旧可以调用的内存。这个计数器只显示上一次观察到的值;它不是一个平均值。 |
Cache Bytes | 是 System Cache Resident Bytes 的总数。System Driver Resident Bytes、System Code Resident Bytes、以及 Pool Paged Resident Bytes 计数器。该计数器只显示最后一次观察的值,它不是一个平均值。 | |
Memory瓶颈或溢出 | Pages/sec | 是指为解析硬页错误从磁盘读取或写入磁盘的页数。(当处理程序请求 不在本身工作集或物理内存其它地方中的代码或数据,而必须要从磁盘上检索时就会出现硬页错误)。这个计数器设计成可以显示导致系统范围延缓类型错误的主要指示器。它是 Memory: Pages Input/sec 和 Memory: Pages Output/sec 的 总和。是用页数计算的,以便在不用做转换的情况下就可以同其它页计数如: Memory: Page Faults/sec 做比较,这个值包括为满足错误而在文件系统缓存(通常由应用程 序请求)的非缓存映射内存文件中检索的页。这个计数器显示用上两个实例中观察到的值 之间的差除于实例间隔的持续时间所得的值。 |
Page Reads/sec | 是指为解析硬页错误而读取磁盘的次数。(当处理请求的硬 页错误不在工作集和物理内存其它地方中的代码或数据,而必须从磁盘上检索时 就会出现硬页错误)。这个计数器设计成可以显示导致系统范围延缓 错误的主要指示器。这个包括要满足错误而在文件系统缓存(通常由应用程 序请求)的非缓存映射内存文件终检索的页。这个计数器显示用上两个实例中 观察到的值之间的差除于实例间隔的持续时间所得的值。 | |
Transition Faults/sec | 是指由在修改页列表、备份页表或在页错误时写入 磁盘上造成的页错误数量。这些页是在没有额外磁盘活动的情况下恢复的。传输 错误是在不计算每次操作时出错的页数的情况下计算错误数量。这个计数 器显示用上两个实例中观察到的值之间的差除于实例间隔的持续时间所得的值。 | |
Pool Paged Bytes | 指在分页池中的字节数,分页池是系统内存(操作系 统使用的物理内存)中可供对象(在不处于使用时可以写入磁盘的)使 用的一个区域。Memory: Pool Paged Bytes 的计数方式与 Process: Pool Paged Bytes 的方式不同,因此可能不等于 Process: Pool Paged Bytes: _Total 。这个 计数器仅显示上一次观察的值;而不是一个平均值。 | |
Pool Nonpaged Bytes | 指在非分页池中的字节数,非分页池是指系统内存(操作系统使用的物理内存)中可供对象(指那些在不处于使用时不可以写入磁盘上 而且只要分派过就必须保留在物理内存中的对象)使用的一个区域。Memory: Pool Nonpaged Bytes 的计数方式与 Process: Pool Nonpaged Bytes 的计数方式 不同,因此可能不等于Pool Nonpaged Bytes: _Total。 这个计数器仅显示上一次观察的值;而不是一个平均值。 | |
PhysicalDisk 的使用 | %Disk Time | 指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间 的百分比。 请谨慎对待 % Disk Time 计数器。因为该计数器的 _Total 实例不能精确反映多磁盘系统的利用率,因此使用 % Idle Time 计数器也非常重要。 |
% Idle Time | 汇报在实例间隔时磁盘闲置时间的百分比。 | |
Disk Reads/sec | 指在此盘上读取操作的速率。 | |
Disk Writes/sec | 指在此盘上写入操作的速率。 | |
PhysicalDisk的瓶颈 | Avg.Disk Queue Length(所有实例) | 指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。 |
System | File Data Operations/ sec | 指在计算机的所有逻辑磁盘上读取和写入操作的综合速度。这是系统的逆转率:每秒钟的文件控制操作。这个总值显示了上两个实例中观察到的值的差异除于实例间隔的时间。 |
Processor Queue Length | 是指处理列队中的线程数。即使在有多个处理器 的计算机上处理器时间也会有一个单列队。不象磁盘计数器,这个计数器仅 计数就绪的线程,而不计数运行中的线程。如果处理器列队中总是有两个以上的线程 通常表示处理器堵塞。这个计数器仅显示上一次观察的值;而不是一个平 均值。 | |
网络使用 | Network Segment\ % Net Utilization |
|
网络吞吐量 |
| 协议传输计数器(随网络协议而改变);对于 TCP/IP:Network Interface\ Bytes total/sec |
Cache |
|
|
Paging File |
|
|
Server |
|
|
Thread |
|
|