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年进行澄清,但回答该问题的人没有回答。
这是我找到的帖子。
任务列表未提供您正在查找的信息。我建议使用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)
内存就像一个茶杯,它可能是满的,也可能是空的,瞬间看一下杯子就可以知道它有多满(这就是你的“memusage”命令)。
CPU 就像滑雪缆车。无论您是否乘坐电梯,它都会以相当恒定的速度移动。不可能在一次瞬时观察中确定您的使用情况 - 我们需要知道您骑了多长时间(即您的“cputime”命令)。您必须使用“cputime”命令至少两次!
例如:
从第一次运行 cputime 命令到第二次,使用时间从 28 分钟增加到 32 分钟——该进程使用了 4 分钟的 CPU 时间。
从晚上 7:09 到晚上 7:17 持续时间为 8 分钟——总共有 8 分钟可用时间,但您的进程只使用了 4 分钟:4 / 8 = 50% 平均系统使用率。
如果您的系统有多个处理器,那么您可以除以 CPU 总数以获得每个 CPU 的平均值 - 例如,在双 CPU 系统中,平均值为 50% / 2 = 25%。
为了便于编写,我在上面使用了分钟 - 实际上,您可能会查看进程在只有毫秒长的时间窗口内使用了多少纳秒的 CPU 时间。