Perfmon监控Windows进程性能

511 阅读8分钟

Perfmon简介

Perfmon(Performance Monitor)是一款Windows自带的性能监控工具,提供了图表化的系统性能实时监视器、性能日志和警报管理。通过添加性能计数器(Performance Counter)可以实现对CPU、内存、网络、磁盘、进程等多类对象的上百个指标的监控。其中,性能日志可定义输出格式为二进制文件、文本文件、SQLSERVER记录等,以方便后续使用第三方工具进行分析。

Perfmon数据收集器使用

Perfmon支持选择性的监控感兴趣的数据收集器,指标范围广、粒度细,而且支持将监控数据持久化。使用方法:  

  • Win+r打开运行窗口,输入 perfmon 后回车打开perfmon.exe。  
  • 展开“数据收集器集”,右键单击“用户定义”,指向“新建”,然后单击“数据收集器集”,将启动“创建新数据收集器集”向导。
  • 按照向导一步步创建新的数据收集器。推荐手动创建,选择自己感兴趣的指标监控。
  • 创建好后,通过工具栏的启动按钮可以启动数据收集器。
  • 点击工具栏上的停止按钮就可以停止数据收集器。之后,可以在右侧导航栏选择”报告”,展开“用户定义”,查看报告。
  • 报告也可以另存为csv文件做进一步分析。

Perfmon对进程的监控指标

一般来说,我们主要关注自己进程的CPU、内存等性能数据。Perfmon设置了进程监控常用指标,这些指标比较直观地体现了进程的运行状况,是进行应用系统监控或应用系统跟踪调优的依据。先监控这些指标需要在创建数据收集器的时候选择监控process对象,并且选定对象的实例为想要监控的进程。

下面表格列出了Process对象的主要指标:

性能对象计数器提供的信息
Process% Privileged Time% Privileged Time 是在特权模式下处理线程执行代码所花时间的百分比。当调用 Windows 系统服务时,此服务经常在特权模式运行,以便获取对系统专有数据的访问。在用户模式执行的线程无法访问这些数据。对系统的调用可以是直接的(explicit)或间接的(implicit),例如页面错误或间隔。
Process% Processor Time% Processor Time 是所有进程线程使用处理器执行指令所花的时间百分比。指令是计算机执行的基础单位。线程是执行指令的对象,进程是程序运行时创建的对象。此计数包括处理某些硬件间隔和陷阱条件所执行的代码。
Process% User Time% User Time 指处理线程用于执行使用用户模式的代码的时间的百分比。应用程序、环境分系统和集合分系统是以用户模式执行的。Windows 的可执行程序、内核和设备驱动程序不会被以用户模式执行的代码损坏。
ProcessCreating Process ID valueCreating Process ID value 指创建该进程的父进程号。
ProcessElapsed Time该进程运行的总时间(用秒计算)。
ProcessHandle Count这个处理现在打开的句柄总数。这个数字等于这个处理中每个线程当前打开的句柄的总数。
ProcessID ProcessID Process 指这个处理的特别的识别符。ID Process 号可重复使用,所以这些 ID Process 号只能在一个处理的寿命期内识别那个处理。
ProcessIO Data Bytes/sec处理从 I/O 操作读取/写入字节的速度。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Data Operations/sec本处理进行读取/写入 I/O 操作的速率。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Other Bytes/sec处理给不包括数据的 I/O 操作(如控制操作)字节的速率。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Other Operations/sec本处理进行非读取/写入 I/O 操作的速率。例如,控制性能。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Read Bytes/sec处理从 I/O 操作读取字节的速度。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Read Operations/sec本处理进行读取 I/O 操作的速率。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessIO Write Bytes/sec处理从 I/O 操作写入字节的速度。这个计数器为所有由本处理产生的包括文件、网络和设备。
ProcessIO Write Operations/sec本处理进行写入 I/O 操作的速率。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。
ProcessPage Faults/secPage Faults/sec 指在这个进程中执行线程造成的页面错误出现的速度。当线程引用了不在主内存工作集中的虚拟内存页即会出现 Page Fault。如果它在备用表中(即已经在主内存中)或另一个共享页的处理正在使用它,就会引起无法从磁盘中获取页。
ProcessPage File BytesPage File Bytes 指这个处理在 Paging file 中使用的最大字节数。Paging File 用于存储不包含在其他文件中的由处理使用的内存页。Paging File 由所有处理共享,并且 Paging File 空间不足会防止其他处理分配内存。
ProcessPage File Bytes PeakPage File Bytes Peak 指这个处理在 Paging files 中使用的最大数量的字节。
ProcessPool Nonpaged BytesPool Nonpaged Bytes 指在非分页池中的字节数,非分页池是指系统内存(操作系统使用的物理内存)中可供对象(指那些在不处于使用时不可以写入磁盘上而且只要分派过就必须保留在物理内存中的对象)使用的一个区域。这个计数器仅显示上一次观察的值;而不是一个平均值。
ProcessPool Paged BytesPool Paged Bytes 指在分页池中的字节数,分页池是系统内存(操作系统使用的物理内存)中可供对象(在不处于使用时可以写入磁盘的)使用的一个区域。这个计数器仅显示上一次观察的值;而不是一个平均值。
ProcessPriority Base这次处理的当前基本优先权。在一个处理中的线程可以根据处理的基本优先权提高或降低自己的基本优先权。
ProcessPrivate BytesPrivate Bytes 指这个处理不能与其他处理共享的、已分配的当前字节数。
ProcessThread Count在这次处理中正在活动的线程数目。指令是在一台处理器中基本的执行单位,线程是指执行指令的对象。每个运行处理至少有一个线程。
ProcessVirtual BytesVirtual Bytes 指处理使用的虚拟地址空间的以字节数显示的当前大小。使用虚拟地址空间不一定是指对磁盘或主内存页的相应的使用。虚拟空间是有限的,可能会限制处理加载数据库的能力。
ProcessVirtual Bytes PeakVirtual Bytes Peak 指在任何时间内该处理使用的虚拟地址空间字节的最大数。
ProcessWorking SetWorking Set 指这个处理的 Working Set 中的当前字节数。Working Set 是在处理中被线程最近触到的那个内存页集。如果计算机上的可用内存处于阈值以上,即使页不在使用中,也会留在一个处理的 Working Set中。当可用内存降到阈值以下,将从 Working Set 中删除页。如果需要页时,它会在离开主内存前软故障返回到 Working Set 中。
ProcessWorking Set PeakWorking Set Peak 指在任何时间这个在处理的 Working Set 的最大字节数。

监控CPU

利用Perfmon监控进程的% Processor Time和% User Time这2个计数器可以监控其CPU使用,分析CPU使用是否存在异常。% Processor Time记录了进程中使用CPU的百分比;% User Time记录了进程用户模式使用CPU的百分比;如果这2个值一直较大,或者持续升高,则可能存在CPU使用异常的问题。

监控内存

利用Perfmon监控进程的Handle Count、Virtual Bytes和Working Set这3个计数器可以监控其内存使用,分析是否存在内存泄漏。Handle Count记录了进程当前打开的句柄个数;Virtual Bytes记录了进程在虚拟地址空间上使用的虚拟内存大小;Working Set记录了操作系统为程序进程分配的内存总量,如果这个值不断持续增加,而Virtual Bytes却跳跃式地增加,则很可能存在内存泄露问题。