在Windows平台上测试程序的CPU使用率和内存占用量

来源:互联网 发布:中国未来 知乎 编辑:程序博客网 时间:2024/05/18 02:01

        程序开发是分阶段的,在完成功能开发和测试后,研发人员还需要获取程序的性能数据,并与竞品进行比较。其中,互联网程序有几个比较重要的指标:网络传输时延、网络传输流量、程序的CPU使用率以及程序的内存占用量等;对于网络相关性能指标,网络已经有较多的工具可以用于分析,就不再阐述,而本文重点关注CPU使用率和内存占用量。

        在Windows平台上,微软的开发包中(Micosoft Windows SDK)提供性能分析工具Windows Performance Analyzer(下面简称WPA),它可以获取指定程序的性能数据,并通过图形的形式将其展示出来。其中,该工具对WIn7和vista支持的比较好,就是可以分析更多的指标。

        ETW(Event Tracing Windows)提供了WPA的基础功能。ETW架构如图所示:


        ETW有三种组件构成:

  • 控制器(Controller):负责启动和停止事件跟踪会话,以及打开提供者;
  • 提供者(Provider):返回指定事件;
  • 消费者(Consumer):分析提供者产生的数据。
        WPA使用原则:
  1. 打开提供者,进行事件跟踪;
  2. 从指定的提供者收集事件数据;
  3. 停止收集事件数据,并将数据写入etl文件;
  4. 使用WPA查看etl文件。
        下面提供一种查看指定程序CPU使用率和内存占用量的语法,一种是指定程序名称:
  1. 启动“NT Kernal Logger”,收集内核事件:xperf –on Base –BufferSize 1024  –MinBuffers 10 –MaxBuffers 16
  2. 初始化堆会话,黑色斜体部分需要替换为指定程序:xperf -start HeapSession -heap -PidNewProcess “C:\Program Files\Windows Sidebar\sidebar.exe” –BufferSize 1024 –MinBuffers 128 –MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
  3. 停止会话,并将事件数据写入到指定文件:xperf –stop -stop HeapSession –d heapTrace.etl
  4. 以图形的形式查下事件数据:xperf heapTrace.etl
        另一种指定程序ID:
         1. xperf -start HeapSession -heap –Pids 1472  -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

        分析结果如下:
        CPU使用率:


         内存占用量:



          此外,在加载了符号表的情况下,还可以查看哪些函数导致CPU使用率或内存占用量增高。