我怀疑我的一个应用程序占用的CPU周期比我想要的多.问题是 - 它发生在爆发中,只是看着任务管理器并没有帮助我,因为它只显示了即时使用.
有没有办法(在Windows上)跟踪某些进程的CPU和内存使用情况的历史记录.例如,我将开始跟踪"firefox",大约一小时后,将会看到该小时内CPU和内存使用情况的图表.
我正在寻找现成的工具或程序化的方法来实现这一目标.
只需键入perfmon
到Start > Run
,然后按回车.当"性能"窗口打开时,单击+号以向图表添加新计数器.计数器是您的PC工作方式的不同方面,并按相似性分组为称为"性能对象"的组.
对于您的问题,您可以选择"处理","内存"和"处理器"性能对象.然后,您可以实时查看这些计数器
您还可以指定实用程序以保存性能数据以供日后检查.为此,请在左侧面板中选择"性能日志和警报".(它位于系统监视器控制台下,它为我们提供了上述计数器.如果不存在,请单击"文件">"添加/删除管理单元",单击添加,然后在列表中选择"性能日志和警报" ".)从"性能日志和警报"中,在"计数器日志"下创建一个新的监视配置.然后,您可以添加计数器,指定采样率,日志格式(二进制或纯文本)和日志位置.
Process Explorer可以显示进程占用的总CPU时间,以及每个进程的历史记录图.
使用perfmon.exe,我尝试使用"处理"计数器下的"专用字节"计数器来跟踪内存使用情况,它运行良好.
也许你可以用它.它应该适合您,并将报告指定进程的处理器时间.
@echo off : Rich Kreider: report processor time for given process until process exits (could be expanded to use a PID to be more : precise) : Depends: typeperf : Usage: foo.cmd set process=%~1 echo Press CTRL-C To Stop... :begin for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do ( if %%~c==-1 ( goto :end ) else ( echo %%~c%% goto begin ) ) :end echo Process seems to have terminated.
我同意,perfmon.exe允许您为要监视的任何进程添加计数器(右键单击右侧面板).
性能对象:进程检查"从列表中选择实例"并选择firefox.
WMI是Windows Management Instrumentation,它内置于所有最新版本的Windows中.它允许您以编程方式跟踪CPU使用率,磁盘I/O和内存使用情况.
Perfmon.exe是此接口的GUI前端,可以监视进程,将信息写入日志,并允许您在事后分析日志.这不是世界上最优雅的计划,但它确实完成了工作.