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

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

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

有帮助吗?

解决方案

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

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

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

其他提示

流程浏览器 可以显示进程占用的总 CPU 时间,以及每个进程的历史图。

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

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

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

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

表现对象:进程检查“从列表中选择实例”,然后选择Firefox。

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

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

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

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

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

您还可以尝试使用 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。

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

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

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

网站描述:

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

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

Perfmon.exe 内置于 Windows 中。

您可能想看看 处理套索.

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

Windows 10 Cumulative CPU time

这不会按选项卡分解浏览器中的使用情况。通常,不活动的选项卡会执行大量工作,每个打开的选项卡都会消耗能量并降低您的电脑速度。

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

但是突然出现无响应,听起来更像是由于 HD/SS 驱动器故障而导致的中断时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top