代码之家  ›  专栏  ›  技术社区  ›  Eli Bendersky

跟踪每个进程的CPU和内存使用情况

  •  147
  • Eli Bendersky  · 技术社区  · 16 年前

    我怀疑我的一个应用程序占用的CPU周期比我想要的要多。问题是——它是突发性的,仅仅看一下任务管理器并不能帮助我,因为它只显示了即时使用。

    是否有方法(在Windows上)跟踪某些进程的CPU和内存使用历史记录。例如,我将开始跟踪“firefox”,大约一个小时后,就会看到一张该小时CPU和内存使用情况的图表。

    我正在寻找一个现成的工具或者一个程序化的方法来实现这一点。

    14 回复  |  直到 5 年前
        1
  •  155
  •   user207421    12 年前

    只是类型 perfmon 进入之内 Start > Run 然后按回车键。当性能窗口打开时,单击+符号将新计数器添加到图表中。计数器是PC工作方式的不同方面,按相似性分组为“性能对象”组。

    对于您的问题,您可以选择“进程”、“内存”和“处理器”性能对象。然后您可以实时看到这些计数器

    您还可以指定实用程序来保存性能数据,以便以后进行检查。为此,请在左侧面板中选择“性能日志和警报”。(它位于系统监视器控制台的正下方,为我们提供上述计数器。如果不存在,请单击“文件”>“添加/删除管理单元”,单击“添加”并在列表中选择“性能日志和警报”。)从“性能日志和警报”中,在“计数器日志”下创建新的监控配置。然后可以添加计数器,指定采样率、日志格式(二进制或纯文本)和日志位置。

        2
  •  40
  •   Niall    16 年前

    Process Explorer 可以显示进程占用的总CPU时间,以及每个进程的历史图表。

        3
  •  15
  •   CppNoob    10 年前

    使用perfmon.exe,我尝试使用“process”计数器下的“private bytes”计数器来跟踪内存使用情况,它工作得很好。

        4
  •  10
  •   Rich Kreider    12 年前

    也许你可以用这个。它应该为您工作,并将报告指定进程的处理器时间。

    @echo off
    : Rich Kreider <rjk@techish.net>
    : 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 <processname>
    
    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.
    
        5
  •  7
  •   Ady Romantika    16 年前

    我同意,PerfMon.exe允许您为要监视的任何进程添加计数器(右键单击右面板)。

    性能对象:进程 选中“从列表中选择实例”并选择Firefox。

        6
  •  6
  •   doflynn    16 年前

    wmi是Windows Management Instrumentation,它内置于所有最新版本的Windows中。它允许您以编程方式跟踪诸如CPU使用、磁盘I/O和内存使用等情况。

    perfmon.exe是这个界面的一个GUI前端,它可以监视一个进程,将信息写入日志,并允许您事后分析日志。这不是世界上最优雅的项目,但它确实完成了任务。

        7
  •  2
  •   dyasta    14 年前

    过程lasso的设计更多的是为了过程自动化和优先级优化,而不是图。也就是说 提供每个进程的CPU利用率历史记录(在图表上绘制为一条白线),但确实如此 不是 提供每个进程的内存使用历史记录。

    免责声明:我是process lasso的作者,但我并不是真正认可它——因为有更好的解决方案(perfmon是最好的)。

    最棒的是Windows Vista+资源和性能监视器。它可以通过进程跟踪CPU、内存、网络和磁盘访问的使用情况。它是一个很好的整体系统信息实用程序,应该早就创建了。除非我弄错了,否则它可以跟踪每个进程的CPU和内存利用率随时间的变化(除了列出的其他内容)。

        8
  •  2
  •   valiano    5 年前

    虽然我没有试过, ProcDump 似乎是个更好的解决方案。

    现场描述:

    ProcDump是一个命令行实用程序,其主要目的是监视应用程序的CPU峰值,并在峰值期间生成崩溃转储,管理员或开发人员可以使用该转储来确定峰值的原因。ProcDump还包括挂起的窗口监视(使用与Windows和任务管理器使用的窗口挂起定义相同)、未处理的异常监视,并且可以根据系统性能计数器的值生成转储。它还可以作为一个通用的进程转储实用程序,可以嵌入到其他脚本中。

        9
  •  1
  •   Eli Bendersky    16 年前

    嗯,我明白了 Process Explorer 虽然它的图形不太方便,但可以做到。仍在寻找替代/更好的方法。

        10
  •  1
  •   SaaS Developer    16 年前

    perfmon.exe内置于Windows中。

        11
  •  1
  •   maksa    16 年前

    你可能想看看 Process Lasso .

        12
  •  1
  •   Kaarthikeyan    6 年前

    您还可以尝试使用Cyper/Perl/Java脚本获得使用WMI命令的使用数据,下面是它的步骤。

    我们需要执行2个wmi select查询并应用cpu%利用率公式

    1。检索逻辑进程总数

    select NumberOfLogicalProcessors from Win32_ComputerSystem
    

    2。要检索percentprocessortime的值,timestamp_sys100ns(已应用CPU利用率公式,获取实际利用率百分比)和workingsetprivate(RAM),最少2次,休眠间隔为1秒。

    select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234
    

    三。应用CPU%利用率公式

    CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors
    

    p2表示第二次检索的percentprocessortime,p1表示第一次检索的percentprocessortime,t2和t1表示时间戳sys100ns。

    在链接中可以找到这个的示例Perl代码 http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

    此逻辑适用于支持WMI查询的所有编程语言

        13
  •  1
  •   Bryce    6 年前

    在Windows10下,任务管理器可以显示累计的CPU时间。只需前往“应用程序历史记录”选项卡和“删除使用历史记录”。现在让事情运行一两个小时:

    Windows 10 Cumulative CPU time

    它不做的是按制表符分解浏览器中的用法。通常,不活动的标签页会做大量的工作,每一个打开的标签页都会消耗能量并降低电脑的运行速度。

        14
  •  0
  •   Terrik    6 年前

    我使用taskinfo作为CPU/RAM/IO速度的历史图表。 http://www.iarsn.com/taskinfo.html

    但突发的无响应,听起来更像是由于一个错误的HD/SS驱动器的中断时间。

    推荐文章