【问题标题】:psutil's proc.as_dict attribute "get_cpu_percent" returns 0.0 for each processpsutil 的 proc.as_dict 属性“get_cpu_percent”为每个进程返回 0.0
【发布时间】:2015-01-07 19:59:39
【问题描述】:

我正在尝试使用 psutil 模块编写一个非常简单的 python 脚本来返回进程 ID、创建时间、名称和 CPU %。最终我将使用它来监控基于这些返回值的特定阈值,但对于我们的案例,我将使用一个简单的示例

  • 操作系统:CentOS 6.5
  • Python:2.6.6(基本 CentOS 6 软件包)
  • psutil:0.6.1

当我运行以下脚本时,它会为除 cpu_percent 之外的所有内容返回正确的值。它为每个进程返回 0.0。我认为问题是由于 cpu_percent 的默认间隔为 0。我正在使用 psutil.process_iter() 和 as_dict 来遍历正在运行的进程。我不确定如何设置间隔。我有什么遗漏吗?

#! /usr/bin/python
import psutil

for proc in psutil.process_iter():
    try:
        pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time', 'get_cpu_percent'])
    except psutil.NoSuchProcess:
        pass
    else:
        print(pinfo)

【问题讨论】:

  • psutil 的最新版本是 2.2。您仍然使用 0.6 的任何原因?
  • 我只是在使用 CentOS 6 发行版。我想我应该使用最新的。

标签: python psutil


【解决方案1】:

根据文档,get_cpu_percent 将允许您测量特定进程用作阻塞测量的 CPU 时间量。例如:

import psutil
import os

# Measure the active process in a blocking method,
#    blocks for 1 second to measure the CPU usage of the process
print psutil.Process(os.getpid()).get_cpu_percent(interval=1)
# Measure the percentage of change since the last blocking measurement.
print psutil.Process(os.getpid()).get_cpu_percent()

相反,您可能希望在报告中使用get_cpu_times

>>> help(proc.get_cpu_times)
Help on method get_cpu_times in module psutil:

get_cpu_times(self) method of psutil.Process instance
    Return a tuple whose values are process CPU user and system
    times. The same as os.times() but per-process.

>>> pinfo = psutil.Process(os.getpid()).as_dict(attrs=['pid', 'name', 'create_time', 'get_cpu_times'])
>>> print (pinfo.get('cpu_times').user, pinfo.get('cpu_times').system)
(0.155494768, 0.179424288)

【讨论】:

  • 这是个好信息。不幸的是,就我正在做的事情而言,它并没有帮助,尽管它可能会让我走上正确的道路。
  • 我需要返回的是进程正在使用的总 CPU 百分比。背景故事:老板手动关注每个 srvr 以获得长时间运行的高 cpu procs。对我来说,这很愚蠢,但他仍然希望这样做。我想我可以自动化它。 cpu_times 不返回进程正在使用的总 cpu 百分比。
  • @DrewMorone 你知道吗?我现在正在为此苦苦挣扎
  • 很遗憾没有。我想我最终放弃了这一切。
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多