3

我可以使用以下代码获取当前的 cpu 使用详细信息

import psutil as PSUTIL
PSUTIL.cpu_percent(interval=1)

我的问题是;如何获取过去 10 分钟的 CPU 使用情况详细信息?

4

4 回答 4

2

使用 cronjob 在后台运行 python 脚本
1) 打开终端并输入 crontab -e
2) 编辑文件并编写以下代码以在后台运行 python 脚本

*/1 * * * * python /yourpath/yourpythonfile.py 

3)创建yourpythonfile.py并编写以下代码

import psutil as PSUTIL 
    with open('/yourpath/yourfile.txt', "a") as myfile:
       myfile.write(str(PSUTIL.cpu_percent(interval=1))+"%"'\n')
于 2015-11-05T05:38:20.007 回答
2

这个想法是:

  1. 使用threading模块或系统服务/守护进程创建后台任务。与您的主代码并行工作的东西;
  2. 在后台任务中创建一个计时器。在每个计时器的滴答声中询问 cpu 使用情况并将其写入数组。
  3. 当主代码需要CPU加载统计信息时,通过 , 等从后台任务中传递IPCfiles

确切的解决方案取决于您可以使用哪些工具。

于 2015-10-29T10:39:40.490 回答
1

要测量 CPU 使用率,您需要比较两个给定时间的使用率;您无法从过去获取测量点(除非您按照@ajsp 的建议存储它)。

例如:

import psutil
import time

def calculate(t1, t2):
    # from psutil.cpu_percent()
    # see: https://github.com/giampaolo/psutil/blob/master/psutil/__init__.py
    t1_all = sum(t1)
    t1_busy = t1_all - t1.idle
    t2_all = sum(t2)
    t2_busy = t2_all - t2.idle
    if t2_busy <= t1_busy:
        return 0.0
    busy_delta = t2_busy - t1_busy
    all_delta = t2_all - t1_all
    busy_perc = (busy_delta / all_delta) * 100
    return round(busy_perc, 1)

cpu_time_a = (time.time(), psutil.cpu_times())
# your code taking time
cpu_time_b = (time.time(), psutil.cpu_times())
print 'CPU used in %d seconds: %s' % (
    cpu_time_b[0] - cpu_time_a[0],
    calculate(cpu_time_a[1], cpu_time_b[1])
)

或者你可以使用cpu_percent(interval=600); 如果您不希望它阻止脚本中的其他代码,您可能希望在单独的线程中执行此操作。

但如前所述,在这两种情况下,这都不会回到过去;只需测量从现在到的 CPU 时间interval

如果您只需要跟踪您的 CPU 使用率并且不想重新发明轮子,您可以使用:

这些解决方案可以帮助您从系统中保存指标以进行处理。

于 2015-10-29T08:13:26.383 回答
0

您可以使用它os.getloadavg()来查找过去 1、5 和 15 分钟内服务器上的平均负载。

可能这对您打算做的事情有用。

于 2017-09-26T12:15:49.180 回答