如何在Windows中使用“任务列表”获取进程的CPU使用率

Jak*_*tch 7 java windows command-line process cpu-usage

我正在用Java编写程序,以定期显示给定进程ID的CPU和内存使用情况。我的实现调用任务列表。通过以下命令获取内存使用情况非常简单:

tasklist /fi "memusage ge 0" /fi "pid eq 2076" /v

这将返回进程ID 2076的内存使用情况,我可以将其用于我的任务。通过调用以下命令,我可以提取CPU时间。

tasklist /fi "pid eq 2076" /fi "CPUTIME ge 00:00:00" /v

我的问题是,我将如何获取该进程的CPU使用率?

我在我的问题上的StackOverflow上找到了一个帖子,但是答案不清楚,而且我不明白在命令中键入什么才能得到所需的信息。该问题在2008年得到了回答,有人要求在2013年进行澄清,但回答该问题的人没有回答。

是我找到的帖子。

cra*_*gts 7

任务列表未提供您正在查找的信息。我建议使用Get-Counter对超级用户网站答案的评论似乎符合您所追求的目标。

Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty countersamples| Select-Object -Property instancename, cookedvalue| ? {$_.instanceName -notmatch "^(idle|_total|system)$"} | Sort-Object -Property cookedvalue -Descending| Select-Object -First 25| ft InstanceName,@{L='CPU';E={($_.Cookedvalue/100/$env:NUMBER_OF_PROCESSORS).toString('P')}} -AutoSize
Run Code Online (Sandbox Code Playgroud)

  • 微软一贯的用户友好性 (2认同)

Jam*_*sJJ 6

内存就像一个茶杯,它可能是满的,也可能是空的,瞬间看一下杯子就可以知道它有多满(这就是你的“memusage”命令)。

CPU 就像滑雪缆车。无论您是否乘坐电梯,它都会以相当恒定的速度移动。不可能在一次瞬时观察中确定您的使用情况 - 我们需要知道您骑了多长时间(即您的“cputime”命令)。您必须使用“cputime”命令至少两次!

例如:

  • 晚上 7:09,您在进程上运行 cputime 命令,它返回“28 分钟”
  • 晚上 7:17,您再次在进程上运行 cputime 命令,它返回“32 分钟”

从第一次运行 cputime 命令到第二次,使用时间从 28 分钟增加到 32 分钟——该进程使用了​​ 4 分钟的 CPU 时间。

从晚上 7:09 到晚上 7:17 持续时间为 8 分钟——总共有 8 分钟可用时间,但您的进程只使用了 4 分钟:4 / 8 = 50% 平均系统使用率。

如果您的系统有多个处理器,那么您可以除以 CPU 总数以获得每个 CPU 的平均值 - 例如,在双 CPU 系统中,平均值为 50% / 2 = 25%。

为了便于编写,我在上面使用了分钟 - 实际上,您可能会查看进程在只有毫秒长的时间窗口内使用了多少纳秒的 CPU 时间。