psutil:测量特定进程的CPU使用率

8

我正在尝试测量进程树的CPU使用率。

目前只测量一个进程(不包括子进程)的cpu_usage就可以,但是我得到了奇怪的结果。

import psutil
p = psutil.Process(PID)
p.cpu_percent

返回给我的是float>100,这怎么可能呢?

顺便说一下,PID就是某些简单事物的进程 ID。

def foo():
    i = 0
    while True:
        i += 1

根据任务管理器显示,它的CPU使用率约为 12%

我希望得到一个输出结果为 12.5 或类似的结果。

1个回答

15

我读了一些有关 psutil 的文档,以下是我的理解:

注意:百分比大于100是可行的,因为它可能来自在不同CPU核心上运行多个线程的进程。

所以,为了摆脱大于100的情况,您应该这样做:

注意:返回的值明确地没有均匀分配到所有 CPU 核心(与 psutil.cpu_percent() 不同)。这意味着在具有 2 个 CPU 核心的系统上运行的繁忙循环进程将报告为具有 100% 的 CPU 利用率,而不是 50%。 这样做是为了与 UNIX 的 "top" 实用程序保持一致,并使其更容易识别占用 CPU 资源的进程(与 CPU 核心数量无关)。 必须注意,在上面的示例中,Windows 上的 taskmgr.exe 将报告使用率为 50%。要模仿 Windows 的 taskmgr.exe 行为,您可以执行:

p.cpu_percent() / psutil.cpu_count()。

由于我从其他地方得到了这个答案,我会给你一个链接让您检查它:http://psutil.readthedocs.io/en/release-2.2.1/#psutil.Process.cpu_percent


这个方法在英特尔新芯片上仍然有效吗?这些芯片既有效率核心又有性能核心。如果它确实有效,那么价值仍然有意义吗? - jippyjoe4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接