统计进程一段时间内的cpu平均负载及最大最小值

使用python统计cpu负载,输出均值,最大最小值,输出到excel中

先用这个脚本在shell中抓取数据,然后保存成文件,喂给python脚本

 #!/bin/bash 

trap 'onCtrlC' INT
function onCtrlC () {
    echo 'Ctrl+C is captured'
    exit
}
while true; do
  echo "-------------start------------"
  top -b -n 1 >> hwcpu.info
  echo "-------------end sleep--------"
  sleep 3
done

使用python脚本解析上一步的文件,并计算,写入到excel中

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件        :hwcpu.py
@说明        :
@时间        :2022/07/25 17:46:58
@作者        :shitao.li
@版本        :1.0
'''
'''
 使用脚本:hwcpu.sh抓取的top信息即可
 #!/bin/bash 

trap 'onCtrlC' INT
function onCtrlC () {
    echo 'Ctrl+C is captured'
    exit
}
while true; do
  echo "-------------start------------"
  top -b -n 1 >> hwcpu.info
  echo "-------------end sleep--------"
  sleep 3
done

'''
import os
from cmath import e
from signal import pause
from time import sleep

import commands
import sh
import xlsxwriter as xw

file_name = "hwcpu.info"

excelfile = 'hwcpu.xlsx'
os.system("rm -rf hwcpu.xlsx")
sleep(1)
print('-------------------create excel---------------------')
workbook = xw.Workbook(excelfile)  # 创建工作簿
worksheet1 = workbook.add_worksheet("sheet1")  # 创建子表
worksheet1.activate()  # 激活表
title = ['command', 'avg', 'max', 'min']  # 设置表头
worksheet1.write_row('A1', title)  # 从A1单元格开始写入表头
row_index = 2  # 从第二行开始写入数据

def xw_toExcel(name, avg, max, min):  # xlsxwriter库储存数据到excel
    global row_index
    insertData = [name, avg, max, min]
    row = 'A' + str(row_index)
    print(row, insertData)
    worksheet1.write_row(row, insertData)
    row_index += 1


#get name
print('--------------------------get command---------------------------')
return_code, output = commands.getstatusoutput("cat " + file_name + "| awk '{print $12}' | grep -v [0-9].[0-9]| grep -v COMMAND"  )
outputs = output.split('\n')
# print(output)
name_outpus = list(set(outputs))
while '' in name_outpus:
    name_outpus.remove('')
while '' in name_outpus:
    name_outpus.remove('')
name_outpus.sort()
print(name_outpus)



print('----------------------calu values-------------------------')
for pid_name in name_outpus:
    print(pid_name)
    average = 0
    max_val = 0
    min_val = 200
    count = 1
    try:
        return_code, output = commands.getstatusoutput("cat " + file_name +"|grep -ie " + pid_name + "| awk '{print $9}'")
        # print('----------'+output)
        outputs = output.split('\n')
        # print(outputs)
        values = []
        for num in outputs:
            values.append(float(num))
        for value in values:
            # print(value)
            average = value + average
            count = count + 1
            if max_val < value:
                max_val = value
            if min_val > value:
                min_val = value
        average = average/count        
        xw_toExcel(pid_name, average, max_val, min_val)
        # print(average, max_val, min_val)
    except Exception as e:
        print(e)
        continue

workbook.close()  # 关闭表





  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
统计进程 "HPDemo" 在 20 秒内的 CPU 使用范围(最大值到最小值),可以使用 `psutil` 模块来获取进程CPU 使用率,并在指定时间段内记录 CPU 使用率的最大值和最小值。 以下是一个示例代码: ```python import psutil import time def get_process_cpu_range(process_name, duration): cpu_percent_list = [] start_time = time.time() # 收集指定时间段内的 CPU 使用率 while time.time() - start_time < duration: for process in psutil.process_iter(['name']): if process.info['name'] == process_name: cpu_percent = process.cpu_percent(interval=1) cpu_percent_list.append(cpu_percent) # 计算 CPU 使用率的最大值和最小值 cpu_max = max(cpu_percent_list) cpu_min = min(cpu_percent_list) return cpu_max, cpu_min if __name__ == '__main__': process_name = "HPDemo" # 替换为你要监测的进程名称 duration = 20 # 统计的时间段,单位为秒 cpu_max, cpu_min = get_process_cpu_range(process_name, duration) print(f"Process '{process_name}' CPU usage range in {duration} seconds: {cpu_min}% - {cpu_max}%") ``` 在上述代码中,我们定义了一个函数 `get_process_cpu_range` 来获取指定进程在指定时间段内的 CPU 使用率范围。函数使用一个循环来收集 CPU 使用率并记录在 `cpu_percent_list` 列表中。然后,我们使用内置的 `max` 和 `min` 函数来计算列表中的最大值和最小值。最后,打印出 CPU 使用率的范围。 注意,代码中的 `duration` 参数表示统计的时间段,单位为秒。你可以将其替换为你需要的时间段。另外,确保将 `process_name` 替换为你要监测的进程名称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值