如何在 python 中获取过去 10 分钟的 cpu 使用情况
how to get the cpu usage of past 10 minutes in python
我可以使用以下代码
获取当前 cpu 使用详情
import psutil as PSUTIL
PSUTIL.cpu_percent(interval=1)
我的问题是;我怎样才能得到过去 10 分钟 cpu 的使用详情?
要衡量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)
;如果您不希望它阻止脚本中的其他代码,您可能希望在单独的 thread.
中执行此操作
但如前所述,在这两种情况下都不会及时倒退;只需测量从现在到 interval
.
的 CPU 时间
如果您只需要跟踪您的 CPU 使用情况并且不想重新发明轮子,您可以使用:
- http://www.rrdtool.org/ 提供工具来存储并最终绘制指标图表,例如 CPU time
- https://github.com/nicolargo/glances 可以被守护,你可以轮询它以获得你需要的值
- http://dag.wiee.rs/home-made/dstat/
- 等等
这些解决方案可以帮助您保存系统中的指标以供处理。
想法是:
- 使用
threading
模块或系统 service/daemon 创建后台任务。与您的主代码并行工作的东西;
- 在后台任务中创建一个计时器。在每个计时器的滴答声中询问 cpu 用法并将其写入数组。
- 当主代码需要
CPU
加载统计数据时,通过IPC
、files
等从后台任务传递
具体的解决方案取决于您可以使用什么工具。
运行 python 脚本在后台使用 cronjob
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')
您可以使用 os.getloadavg()
来查找过去 1、5 和 15 分钟内服务器的平均负载。
这可能对您打算做的事情有用。
我可以使用以下代码
import psutil as PSUTIL
PSUTIL.cpu_percent(interval=1)
我的问题是;我怎样才能得到过去 10 分钟 cpu 的使用详情?
要衡量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)
;如果您不希望它阻止脚本中的其他代码,您可能希望在单独的 thread.
但如前所述,在这两种情况下都不会及时倒退;只需测量从现在到 interval
.
如果您只需要跟踪您的 CPU 使用情况并且不想重新发明轮子,您可以使用:
- http://www.rrdtool.org/ 提供工具来存储并最终绘制指标图表,例如 CPU time
- https://github.com/nicolargo/glances 可以被守护,你可以轮询它以获得你需要的值
- http://dag.wiee.rs/home-made/dstat/
- 等等
这些解决方案可以帮助您保存系统中的指标以供处理。
想法是:
- 使用
threading
模块或系统 service/daemon 创建后台任务。与您的主代码并行工作的东西; - 在后台任务中创建一个计时器。在每个计时器的滴答声中询问 cpu 用法并将其写入数组。
- 当主代码需要
CPU
加载统计数据时,通过IPC
、files
等从后台任务传递
具体的解决方案取决于您可以使用什么工具。
运行 python 脚本在后台使用 cronjob
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')
您可以使用 os.getloadavg()
来查找过去 1、5 和 15 分钟内服务器的平均负载。
这可能对您打算做的事情有用。