Perfmon(Performance Monitor)是一款Windows自带的性能监控工具,提供了图表化的系统性能实时监视器、性能日志和警报管理。通过添加性能计数器(Performance Counter)可以实现对CPU、内存、网络、磁盘、进程等多类对象的上百个指标的监控。其中,性能日志可定义输出格式为二进制文件、文本文件、SQLSERVER记录等,以方便后续使用第三方工具进行分析。
Perfmon支持选择性的监控感兴趣的性能计数器,指标范围广、粒度细,而且支持将监控数据持久化。当然,如果只是关注性能主要指标(cpu、mem、io、net),也可以直接查看资源管理器(Resmon.exe)。本文主要介绍使用Perfmon进行性能监控的通用方法,更细节的内容请参考其他文档,如,微软官方文档或Perfmon帮助文档:
2.1 Perfmon使用方法
Perfmon是windows自带工具,无需安装,键入命令即可打开工具,具体步骤如下:
1. 开始-->搜索程序和文件,输入perfmon,回车后即可打开工具;
2. 双击左侧导航栏的【性能监视器】,然后在右窗格中单击鼠标右键或”+”,选择“添加计数器”,如图:
3. 在”性能对象”列表,选择需要监控的计数器,添加后即可进行实时监控,如图所示是选择监控cpu的计数器:
监控计数器添加完成后,可以查看到图形实时变化,如上图,计数器%Processor Time表示cpu的利用率,从图中可以看到最新值、平均值、最小和最大值,以及监控持续时间,其中,这里的持续时间是指当前配置显示在图表中的时间跨度,并不是已经监控的时间,该配置可以右键点击图标->属性->常规->持续时间中配置。另外,监控图上右键点击,可以对计算器进行操作,如添加、删除、隐藏、保存、更改属性等操作。
2.2 Perfmon监控对象和指标
通过上节描述,已经可以使用Perfmon进行实时监控了,可能仍然会对描述中的性能对象和性能计数器感到疑惑。通俗的讲,性能对象就是你要直接监控的资源对象,如cpu,mem等,而衡量这些对象的性能需要一些指标,就是性能计数器。Perfmon支持监控多种性能对象,每个对象又提供了比较全面的性能计数器。性能对象、常用性能对象及计数器,如下表所示:
表1 性能对象描述
性能对象 | 提供的信息 |
Browser | Browser performance object 由衡量通知、枚举和其他浏览器传输率的计数器组成 |
Cache | Cache performance object 包括监督文件系统缓存(物理内存上尽可能长时间的存储最近使用过的数据以便访问该数据时不需再从磁盘上读取的那一部分内存。)的计数器。因为应用程序只使 用缓存,因此该缓存可作为应用程序 I/O 操作的指示器。当有足够内存时,缓存可增大,但当内存不足时,缓存会变得太小而无法使用。 |
Distributed Transaction Coordinator | Microsoft Distributed Transaction Coordinator 性能计数器 |
ICMP | ICMP performance object 包括衡量用 ICMP 协议发送和接收消息的速度的计数器。它还包括监督 ICMP 协议错误的计数器。 |
IP | IP performance object 包括衡量使用 IP 协议发送和接收的 IP 数据报速度的计数器。它还包含监督 IP 协议错误计数器。 |
Job object | 由每个活动命名的作业对象收集的帐户和处理器使用数据的报告。 |
Job object Detail | Job object Detail 显示有关作业对象中的活动处理的详细的操作信息。 |
Logical Disk | Logical Disk performance object 包含监视一个硬盘或固定磁盘驱动器的逻辑分区的计数器。Performance Monitor 用逻辑磁盘的驱动器号(如: C)来识别逻辑磁盘。 |
Memory | Memory performance object 由描述计算机上的物理和虚拟内存行为的计数器组成。物理内存指计算机上的随机存取存储器的数量。虚拟内存由物理内存和磁盘上的空间组成。许多内存计数器监 视页面调度(指磁盘与物理内存之的代码和数据页的移动)。过多的页面调度(内存不足的一种表现)可引起拖延,会影响整个系统处理效率。 |
NBT Connection | NBT Connection performance object 包括衡量用 NBT 连接在一台本地计算机和一台远程计算机之间发送和接收字节的速率的计数器。该连接用远程计算机的名称来识别。 |
Network Interface | Network Interface performance object 包括衡量通过一个 TCP/IP 网络连接发送和接收字节和数据包的速率的计数器。它包括监督连接错误的计数器。 |
Objects | Object performance object 包含在系统中监督逻辑对象的计数器,如:处理、线程、多用户终端执行程序和信号量。这个信息可以用于检测计算机资源的不必要的消耗。每个对象需要内存以存储有关对象的基本信息。 |
Paging File | Paging File performance object 包括监督在计算机上的分页文件的计数器。分页文件指为备份计算机上已用物理内存而保留的磁盘空间。 |
Physical Disk | Physical Disk performance object 包含监视计算机上的硬盘或固定磁盘驱动器的计数器。磁盘用于存储文件、程序及分页数据并且通过读取检索这些项目并通过记录写入对其进行更改。物理磁盘计数器的值为逻辑磁盘(由磁盘分成)值的总和。 |
Print Queue | 显示一个打印列队的操作统计。 |
Process | Process performance object 包含监视运行中应用程序和系统处理的计数器。所有在一个处理中的线程均共享同一个地址空间并可以访问同样的数据。 |
Processor | Processor performance object 包含衡量处理器活动方面的计数器。处理器是计算机进行算数和逻辑计算、在附属件起始操作及运行处理线程的部分。一台计算机可以有多台处理器。处理器对象将每台处理器作为对象的范例。 |
Processor performance | 处理器信息 |
PSched Pipe | 数据包计划程序中的管道统计数 |
RAS Port | RAS Port performance object 包括监督计算机上的 RAS 设备的每个远程访问服务端口的计数器。 |
RAS Total | RAS Total performance object 包含将计算机上的远程访问服务(RAS)设备的所有端口的值相加的计数器。 |
Redirector | Redirector performance object 包括在本地计算机上监督网络连接的计数器。 |
RSVP | RSVP 服务性能计数器。 |
System | System performance object 包含应用于计算机上不止一个组件处理器范例的计数器。 |
TCP | TCP performance object 包含衡量使用 TCP 协议发送和接收 TCP Segment 速率的计数器变量。它包含监督在每个 TCP 连接状态下的 TCP 连接数目的计数器变量。 |
Telephony | 电话服务系统 |
Terminal Services | 终端服务信息。 |
Terminal Services Session | 每次终端服务会话资源监督。 |
Thread | Thread performance object 包括衡量线程行为方面的计数器。一个线程是在一台处理器上执行指令的基本对象。所有运行的处理至少有一个线程。 |
UDP | UDP performance object 包含衡量使用 UDP 协议发送和接收 UDP 数据报的速率的计数器。它包括监督 UDP 协议错误的计数器。 |
WMI Objects | WMI 适配器返回的 WMI 高性能提供程序 |
上表中的性能对象有多达数百个性能指标,如果安装有.NET框架,还会看到更多的.NET开头的对象。我们关注系统或应用的性能时,不可能、也不必要关注这么多指标,只需根据实际情况选取必要指标即可。一般而言,对于Windows系统或运行其上的应用来说,CPU、 Memory、Disk、Network等关键对象是必不可少的。
表2 常用性能对象和计数器
性能对象 | 计数器 | 提供的信息 |
Processor | % Idle Time | % Idle Time 是处理器在采样期间空闲的时间的百分比 |
Processor | % Processor Time | % Processor Time 指处理器用来执行非闲置线程时间的百分比。计算方法是,测量范例间隔内非闲置线程活动的时间,用范例间隔减去该值。这个计数器是处理器活动的主要说明器,显示在范例间隔时所观察的繁忙时间平均百分比。 |
Processor | % User Time | % User Time 指处理器处于用户模式的时间百分比。用户模式是为应用程序、环境分系统和整数分系统设计的有限处理模式。 |
Memory | Available Bytes | Available Bytes显示出当前空闲的物理内存总量。当这个数值变小时,Windows开始频繁地调用磁盘页面文件。如果这个数值很小,例如小于5 MB,系统会将大部分时间消耗在操作页面文件上。 |
Memory | % Committed Bytes in Use | % Committed Bytes In Use 是 Memory: Committed Bytes 与Memory: Commit Limit之间的比值。(Committed memory指如果需要写入磁盘时已在分页文件中保留空间的处于使用中的物理内存。Commit Limit是由分页文件的大小而决定的。如果扩大了分页文件,该比例就会减小)。这个计数器只显示当前百分比;而不是一个平均值。 |
Memory | Page Faults/sec | Page Faults/sec是指处理器处理错误页的综合速率。用错误页数/秒来计算。当处理器请求一个不在其工作集(在物理内存中的空间)内的代码或数据时出现 的页错误。这个计数器包括硬错误(那些需要磁盘访问的)和软错误(在物理内存的其它地方找到的错误页)。许多处理器可以在有大量软错误的情况下继续操作。 但是,硬错误可以导致明显的拖延。这个计数器显示用上两个实例中观察到的值之间的差除以实例间隔的持续时间所得的值。 |
Network Interface | Bytes Total/sec | Bytes Total/sec是发送和接收字节的速率,包括帧字符在内。 |
Network Interface | Packets/sec | Packets/sec为发送和接收数据包的速率。 |
Physical Disk | % Busy Time | % Busy Time指磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。 |
Physical Disk | Avg. Disk Queue Length | Avg. Disk Queue Length 是指磁盘队列的平均长度。磁盘完成对读取和写入请求的处理时间,是磁盘数据吞吐量的外在表现。 |
Physical Disk | Current Disk Queue Length | Current Disk Queue Length指在收集操作数据时在磁盘上未完成的请求的数目。它包括在快照内存时正在为其提供服务中的请求。这是一个即时长度而非一定间隔时间的平均值。 多主轴磁盘设备可以一次有多个请求操作,但是其它同时发生的请求为等候服务。这个计数器可能会反映一个暂时的高或低的列队长度,但是如果在磁盘驱动器存在 持续负载,可能值会总是很高。请求等待时间与这个列队的长度减去磁盘上的主轴成正比。这个差值应小于2才能保持良好的性能。 |
2.3 使用计数器日志
在2.1节中介绍了Perfmon性能监视器的使用方法,该功能主要用于对指定的性能指标进行实时监控(类似nmon的交互模式),但它不能把监控的数据保存下来。如果需要持续对系统的指定性能指标进行监控,就需要使用Perfmon的计数器日志功能(类比nmon的后台监控模式),计数器日志可以把监控数据以指定的方式进行保存,同时也方便后续用第三方工具进行分析。
接下来,以监控CPU\MEM为例介绍Perfmon计数器日志的使用方法。
1. 在Perfmon右侧导航窗格中,展开“数据收集器集”,右键单击“用户定义”,指向“新建”,然后单击“数据收集器集”,将启动“创建新数据收集器集”向导;
2. 填入收集器名称,选择”手动创建(高级)”,点击下一步进入选择数据类型向导,如图:
3. 选择“性能计数器”,点击下一步,进入性能计数器选择界面,通过点击”添加”按钮添加CPU\MEM的性能计数器,同时,可以根据采集时长自定义采样间隔,默认是15s,如图:
4. 如果需要自定义日志的保存位置,可以点击”下一步”,否则可以直接点击“完成”,结束配置。
5. 另外,可以右键单击采集器集名称,选择属性,配置监控任务的启停条件,如,配置定时任务或退出条件等,如图为配置采集30s后停止:
6. 如需对监控的性能指标、日志格式、采样时间等进行调整,可以右键单击数据收集任务,选择属性,编辑即可,可以增删计数器、修改日志格式(默认二进制的.blg)、修改采样间隔等,如图:
7. 最后,点击工具栏启动数据收集器即可;
8. 结果收集完成后,可以在右侧导航栏选择”报告”,展开“用户自定义”,查看报告;也可以通过“性能监视器”的“查看日志数据”选择要加载显示的日志文件。
3 Perfmon性能分析方法本节主要介绍使用Perfmon对CPU、MEM、磁盘I\O、NET进行监控和性能分析的通用思路和方法。
1. CPU分析方法
根据2.2节的介绍,CPU监控涉及的主要性能计数器是% Processor Time、% User Time、System:Processor Queue Length。其中,% Processor Time性能计数器的数值展示了服务器CPU的使用情况,如果该值持续超过90%,则说明整个系统面临着CPU瓶颈,需要通过增加CPU来提高性能;%User Time性能计数器的数值展示了用户空间进程的CPU利用率,如果该值较大,需要分析是哪个用户进程、执行的何种操作引起了CPU升高; System:Processor Queue Length计数器的数值展示了CPU等待处理的队列长度,当该计数器的值 > (CPU数量的总数+1)时,说明出现处理器阻塞。一般情况下,Processor:%Process Time很高时,都会伴随着处理器阻塞,但产生处理器阻塞时,Processor:%Process Time 计数器的值并不一定很高,此时就需要分析产生处理器阻塞的原因。
2. MEM分析方法
MEM监控涉及的性能计数器主要是% Commitued Bytes in Use、Available Bytes,如果% Commitued Bytes in Use计数器显示的数值比较大,则系统可能存在内存瓶颈,可以根据Available Bytes计数器的数值进一步判断,如果该值小,说明可用内存不足,存在性能瓶颈;另外,需要注意Pages/sec、Pages Read/sec和Page Faults/sec的数值,这些指标反映了操作系统进行磁盘交换的频率。如果Pages/sec的数值持续较高(如几百的数值),可能存在内存瓶颈,但不排除可能是程序使用内存映射文件所致;如果Page Faults/sec的数值较高,说明页面失效频率较高,操作系统向内存读取的次数较多;通常,Pages Read/sec计数器的数值,一般不要超过5,否则很可能存在内存瓶颈。
3. 磁盘IO分析方法
磁盘I/O监控涉及的性能计数器主要是 % Busy Time、Avg. Disk Queue Length、Current Disk Queue Length,若% Busy Time性能计数器的数值比较大,则硬盘可能存在瓶颈。另外,对于顺序读写的应用,需要计算IOPS,如果实际得到的IOPS等于或超过了磁盘标称的IO能力,则该磁盘存在性能瓶颈。
4. NET分析方法
NET监控涉及的性能计数器主要是Bytes Total/sec,通过该计数器值与网络带宽数值进行比较,可以判断网络链接速度是否存在瓶颈。
4 其他资源
关于python学习、分享、交流,笔者开通了微信公众号【小蟒社区】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学python。