一、Perfmon简介
Perfmon(Performance Monitor)是一款Windows自带的性能监控工具,提供了图表化的系统性能实时监视器、性能日志和警报管理。通过添加性能计数器(Performance Counter)可以实现对CPU、内存、网络、磁盘、进程等多类对象的上百个指标的监控。其中,性能日志可定义输出格式为二进制文件、文本文件、SQLSERVER记录等,以方便后续使用第三方工具进行分析。
二、Perfmon的启用和监控设置
Perfmon使用方法:
2.1 Windows开始中输入perfmon后回车,即可打开perfmon.exe
2.2 点击性能监视器;
2.3 在右窗格中单击右键,然后单击“添加计数器”;或点击监控图上方的"+"也可以打开添加计数器的窗口;
2.4 在性能对象列表中,选择所需的性能指标计数器类别,以在Perfmon.exe中显示对应指标的监控图形,然后单击【添加】-->【确认】
2.5 在计数器勾选区域:
选中监控图底部的某个计数器,右键【属性】,可编辑该计数器的线条颜色、宽度等样式
2.6 通过切换点击不同的计数器类别,可实时观察到所统计的【最新值、平均值、最小值、最大值、持续时间】
2.7 在监控图区域
右键【属性】,可设置采样的持续时间(默认100s)、每间隔多少时间采样一次
右键【图形另存为】,可将本地性能监控的采样图保存到本地
右键【清除】,可将当前监控上的采样图清空,而后从左至右继续开始新的采样图
三、性能分析方法
1、cpu--Processor处理器
- processor% Processor Time总 :CPU当前利用率(百分比)=%user+%sys(参考值<=80%),若该值持续超过90%,说明整个系统面临着处理器方面的瓶颈,需要通过增加处理器来提高性能。
- processor%User Time用户: 与%Privileged Time计数器正好相反,指的是在用户状态模式下(即非特权模式)的操作所花的时间百分比。如果该值较大,可以考虑是否通过算法优化等方法降低这个值。如果该服务器是数据库服务器,导致此值较大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。
- processor%Priviliaged Time系统:CPU在特权模式下处理线程所花的时间百分比。一般的系统服务,进城管理,内存管理等一些由操作系统自行启动的进程属于这类
- processor%DPC Time:处理器在网络处理上消耗的时间,该值越低越好。在多处理器系统中,如果这个值大于50%并且%Processor Time非常高,加入一个网卡可能会提高性能
- system%Process Queue Length:线程在等待分配CPU资源所排队列的长度,此长度不包括正在占有CPU资源的线程。如果该队列的长度大于处理器个数+1,就表示处理器有可能处于阻塞状态(参考值:<=处理器个数+1)
cpu监测总结:
(1)首先看System:% Total Processor Time
性能计数器的计数值
该计数器的数值体现服务器整体处理器的利用率,对多处理器的系统而言,该计数器体现的是所有CPU的平均利用率。如果该值持续超过90%,则说明整个系统面临着处理器方面的瓶颈,需要通过增加处理器来提高性能。
(2)其次查看每个CPU的% User Time
%User Time
是系统的非核心操作消耗的CPU时间,如果该值较大,可以考虑是否能通过友好算法等方法降低这个值。如果该服务器是数据库服务器,%User Time
值大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。
(3)研究系统处理器瓶颈:查看System:Processor Queue Length
计数器的值
当该计数器的值 > (CPU数量的总数+1)时,说明产生了处理器阻塞。在处理器的% Process Time
很高时,一般都随处理器阻塞,但产生处理器阻塞时,Processor:%Process Time
计数器的值并不一定很大,此时就必须查找处理器阻塞的原因。
2、内存--memory
内存分析:用于判断系统有无内存瓶颈,是否需要通过增加内存等手段提高系统性能表现
内存分析的主要方法和步骤:
(1)首先查看Memory:% Commitued Bytes in Use
指标
如果该指标数值比较大,系统可能出现了内存方面的问题,需要继续下面步骤进一步分析。
另外也可以查看Available Bytes可用物理内存(
,如果该值小,则说明可用内存不足,存在性能瓶颈。参考值:>=10%
)
如果 Available Bytes 的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。
(2)注意Pages/sec
、Pages Read/sec
和Page Faults/sec
的值
操作系统会利用磁盘较好的方式提高系统可用内存量or提高内存的使用效率,这三个指标直接反应了操作系统进行磁盘交换的频度。
Pages/sec: 表明由于硬件页面错误而从磁盘取出的页面数(参考值:0-20),或由于页面错误而写入磁盘以释放[url=]工作[/url]集空间的页面数。
如果 Pages/sec 的值为 20 或更大,那么您应该进一步研究页交换活动
;Pages/sec
值不一定大就表明有内存问题,可能是运行使用内存映射文件的程序所致。
Page Input/sec:表示为了解决硬错误而写入硬盘的页数(参考值:>=Page Reads/sec)
Page Reads/sec:表示为了解决硬错误而从硬盘上读取的页数。(参考值: <=5)
Page Faults/sec:
表示每秒钟处理的错误页数,包括硬错误和软错误,
当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是 page Fault。
此时需要查看Pages Read/sec
的计数值,该计数器的阀值为5,如果计数值>5,则可以判断存在内存方面的问题。
如果这个页
位于内存的其他位置,这种错误称为软错误,用Transition Fault/sec 来衡量;
如果这个页位于硬盘上,必须从硬盘重新读取,这个错误成为硬错误。硬错误会使系统的运行效率很快将下来。
Cathe Bytes:文件系统的缓存(默认为50%的可用物理内存)
内存泄露分析:
1、如果怀疑有内存泄露,请监视 Memory/Available Bytes 和 Memory/ Committed Bytes,以观察内存行为,并监视你认为可能在泄露内存的进程的 Process/ Private Bytes、Process/ Working Set 和Process/ Handle Count。
2、如果怀疑是内核模式进程导致了泄露,则还应该监视 Memory/ Pool Nonpaged Bytes、Memory/ Pool Nonpaged Allocs 和 Process(process_name)/ Pool Nonpaged Bytes
如果发生了内存泄漏,processprivate bytes计数器和processworking set 计数器的值往往会升高,同时avaiable bytes的值会降低
private Bytes:是指进程所分配的无法与其他进程共享的当前字节数量。该计数器主要用来判断进程在性能测试过程中有无内存泄漏。
例如:对于一个IIS之上的web应用,我们可以重点监控inetinfo进程的Private Bytes,如果在性能测试过程中,该进程的Private Bytes计数器值不断增加,或是性能测试停止后一段时间,该进程的Private Bytes仍然持续在高水平,则说明应用存在内存泄漏。
3、检查过于频繁的页交换
由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足,这容易与导致页交换的磁盘瓶颈混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:
· Physical Disk % Disk Time
· Physical Disk Avg.Disk Queue Length
例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
要确定过多的页交换对磁盘活动的影响,请将 Physical Disk Avg.Disk sec/Transfer 和 Memory Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可能需要更多的内存
4、研究程序的活动
检查正在运行的程序导致的过多的页交换。如果可能,请停止具有最高工作集值的程序,然后查看页交换速率是否有显著变化。如果您怀疑存在过多的页交换,请检查 Memory Pages/sec 计数器。该计数器显示由于页面不在物理内存中而需要从磁盘读取的页面数。(注意该计数器与 Page Faults/sec 的区别,后者只表明数据不能在内存的指定工作集中立即使用。)
3、磁盘I/O分析方法--Disk
(1)计算每磁盘的IO数
每磁盘的I/O数可用来与磁盘的I/O能力进行对比,如果经过计算得到的每磁盘I/O数超过了磁盘标称的I/O能力,则说明确实存在磁盘的性能瓶颈。
- PhysicalDiskDisk Time: 指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比(值总是会大于100%),如果只有%Disk Time比较大,硬盘有可能是瓶颈---- 为什么值会大于100%:https://www.cnblogs.com/zhengna/p/9989526.html=
- Physical DiskCurrent Disk Queue Length: 等待进行磁盘访问的当前系统请求数量
- PhysicalDiskAvg. Disk sec/Read: 在磁盘上读取数据的所需平均时间(单位s)。
- PhysicalDisk Avg. Disk sec/Write: 在此盘上写入数据的所需平均时间(单位s)。
- Physical Disk Disk Reads/sec: 在读取操作时从磁盘上传送的字节平均数。
- Physical Disk DiskWrites/sec: 在写入操作时从磁盘上传送的字节平均数。
- Physical Disk Avg.Disk sec/Transfer: 反映磁盘完成请求所用的时间。较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。一般来说,定义该值小于15ms最为优异,介于15-30ms之间为良好,30-60ms之间为可以接受,超过60ms则需要考虑更换硬盘或硬盘的RAID方式了
- %Disk Time和Avg.Disk Queue Length: RAID 磁盘中的 % Disk Time 计数器会指示大于 100% 的值。如果出现这种情况,则使用 PhysicalDisk: Avg.Disk Queue Length计数器来确定等待进行磁盘访问的平均系统请求数量。如果不是RAID,则使用 % Disk Time 和 Current Disk Queue Length计数器确定是否磁盘存在瓶颈,如果这两个计数器的值一直很高,则可能是磁盘存在瓶颈
4、网络分析方法
(1)Network Interface:Bytes Total/sec(参考值:该计数器和网络带宽相除,<50%)
Bytes Total/sec
为发送和接收字节的速率,可以通过该计数器值来判断网络链接速度是否是瓶颈,具体操作方法是用该计数器的值和目前网络的带宽进行比较。
5、进程
- 查看进程的%Processor Time值
每个进程的%Processor Time反映进程所消耗的处理器时间。用不同进程所消耗的处理器时间进行对比,可以很容易的看出具体是哪个进程在[url=]性能测试[/url]过程中消耗了最多的处理器时间,从而可以据此针对应用进行优化。
- 查看每个进程产生的页面失效
可以用每个进程产生的页面失效(通过ProcessPage Failures/sec计数器获得)和系统的页面失效(可通过MemoryPage Failures/sec计数器获得)的比值,来判断哪个进程产生了最多的失效页面,这个进程要么是需要大量内存的进程,要么是非常活跃的进程,可以对其进行中的分析。
- 了解进程的ProcessPrivate Bytes
ProcessPrivate Bytes是指进程所分配的无法与其他进程共享的当前字节数量。该计数器主要用拉判断进程在性能测试过程中有无内存泄漏。
例如:对于一个IIS之上的web应用,我们可以重点监控inetinfo进程的Private Bytes,如果在性能测试过程中,该进程的Private Bytes计数器值不断增加,或是性能测试停止后一段时间,该进程的Private Bytes仍然持续在高水平,则说明应用存在内存泄漏。
(备注:进程分析方法用到的计数器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)
参考文档:https://www.cnblogs.com/liangqihui/p/9502928.html