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

时间:2008-09-16 04:13:53

标签: windows sysadmin process-management

我怀疑我的一个应用程序占用的CPU周期比我想要的多。问题是 - 它突然发生,只是看着任务管理器并没有帮助我,因为它只显示立即使用。

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

我正在寻找现成的工具或以编程方式实现这一目标。

16 个答案:

答案 0 :(得分:157)

只需在perfmon中输入Start > Run,然后按Enter即可。当“性能”窗口打开时,单击+号以向图表添加新计数器。计数器是您的PC工作方式的不同方面,并按相似性分组为称为“性能对象”的组。

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

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

答案 1 :(得分:40)

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

答案 2 :(得分:16)

使用perfmon.exe,我尝试使用“处理”计数器下的“私有字节”计数器来跟踪内存使用情况,效果很好。

答案 3 :(得分:10)

也许你可以用它。它应该适合您,并将报告指定进程的处理器时间。

@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.

答案 4 :(得分:7)

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

表现对象:流程 选中“从列表中选择实例”并选择firefox。

答案 5 :(得分:6)

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

Perfmon.exe是此接口的GUI前端,可以监视进程,将信息写入日志,并允许您在事后分析日志。这不是世界上最优雅的计划,但它确实完成了工作。

答案 6 :(得分:2)

Process Lasso更多地设计用于流程自动化和优先级优化,而不是图形。也就是说, 提供每个进程的CPU利用率历史记录(在图表上绘制为白线),但 NOT 提供每进程内存利用率历史记录。

免责声明:我是Process Lasso的作者,但实际上并不支持它 - 因为有更好的解决方案(perfmon是最好的)。

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

答案 7 :(得分:2)

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

网站描述:

  

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

答案 8 :(得分:2)

您也可以尝试使用C#/ Perl / Java脚本使用WMI命令获取利用率数据,以下是它的步骤。

我们需要执行2个WMI选择查询并应用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

第3。应用CPU%利用率公式

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

p2表示第二次检索到PercentProcessorTime,p1表示第一次检索到PercentProcessorTime,t2和t1表示TimeStamp_Sys100NS。

可以在链接http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

中找到此示例的Perl代码

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

答案 9 :(得分:1)

嗯,我看到Process Explorer可以做到,虽然它的图表不太方便。仍在寻找替代/更好的方法来做到这一点。

答案 10 :(得分:1)

Perfmon.exe内置于windows中。

答案 11 :(得分:1)

您可能需要查看Process Lasso

答案 12 :(得分:1)

在Windows 10下,任务管理器可以为您显示累计CPU小时。只需转到“应用程序历史记录”标签和“删除使用情况历史记录”即可。现在,让事情运行一两个小时:

Windows 10 Cumulative CPU time

这不起作用的是按选项卡细分浏览器中的使用情况。通常,不活动的选项卡会做大量的工作,每个打开的选项卡都会消耗能量并降低PC的速度。

答案 13 :(得分:1)

需要获取某些特定Windows服务器的状态和cpu /内存使用情况。我使用了以下脚本:

这是Windows搜索服务的示例。

  $cpu = Get-WmiObject win32_processor
  $search = get-service "WSearch"
  if ($search.Status -eq 'Running')
  {
  $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'"
  $searchid = $searchmem.ProcessID
  $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  Start-Sleep -Seconds 1
  $searchcpu2 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime
  $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS
  $searchcpu = [Math]::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1)
  $searchmem = [Math]::Round($searchcpu1.WorkingSetPrivate / 1mb,1)
  Write-Host 'Service is' $search.Status', Memory consumed: '$searchmem' MB, CPU Usage: '$searchcpu' %'
  }

  else
  {
  Write-Host Service is $search.Status -BackgroundColor Red
  }

答案 14 :(得分:0)

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

但是由于虚假的HD / SS驱动器,没有反应的爆发声更像是中断时间。

答案 15 :(得分:0)

下载process monitor

  1. 启动过程监控器

  2. 根据需要设置过滤器

  3. 进入菜单选项>分析事件

  4. 单击“生成线程配置事件”,选择频率,然后单击“确定”。

  5. 要随时查看收集的历史数据,请进入菜单工具>流程活动摘要