统计进程的CPU和内存占用(最大,均值,90分位)


 本文先通过top采集所有进程的CPU和内存情况并保存到文件,然后提取指定进程的数据,最后通过 python 对采集的数据进行可视化。

一、使用脚本采集top数据

1. 单次top输出如下

2. 编写脚本每隔1秒采集一次top数据保存到文件

#!/bin/bash

# 按照年月日十分秒格式命名文件,例如top_20240907190348
filename=filename="top_$(date "+%Y%m%d%H%M%S").txt"

# 每1秒采集一次top,并将top命令输出的内容保存到文件中
# 按 ctrl+c 退出
while truedo
    timestamp=$(date "+%Y%m%d%H%M%S")
    # 打印当前时间到终端
    echo "Current time: $timestamp"
    # 将当前时间记录到文件
    echo $timestamp >> "$filename"
    # 将当前的top信息记录到文件
    top -b -n 1 >> "$filename"
    # 睡眠1秒
    sleep 1
done

3. 脚本使用实例

脚本运行后,每采集一次会在终端打印时间信息,按ctrl+c可停止采集

bash get_top.sh

脚本运行输出如下

二、提取指定进程mainboa的CPU和内存数据

1. 提取进程数据

grep mainboa ~/top_bpu20240905180932

2. 提取第9列和第10列数据并保存到CSV文件

# 将第9列和第10列的CPU和内存两列数据提取出来保存到 mainboard.csv
grep mainboa ~/top_bpu20240905180932 | awk '{print $9 "," $10}' > mainborad.csv

三、使用python生成数据统计图

绘制折线图,并将最大值,平均值,90分位值并显示到图片中

1. python脚本

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV文件
df = pd.read_csv('mainborad.csv')

# 对于每一列数据,画一个折线图
for column in df.columns:
    plt.figure()  # 创建一个新的图形
    df[column].plot(kind='line')  # 画折线图
    # draw max value as a horizon line
    plt.axhline(y=df[column].max(), color='r', linestyle='--')  # 画一个水平线表示最大
    # draw a text label nemed max:value for max value besize the line
    plt.text(0, df[column].max(), 'max:%d' % df[column].max(), fontsize=12, color='r')  # 在最大值处标注最大值
    # draw mean value as a horizon line
    plt.axhline(y=df[column].mean(), color='g', linestyle='--')  # 画一个水平线表示平均
    # draw a text label nemed mean:value for mean value besize the line
    plt.text(0, df[column].mean(), 'mean:%d' % df[column].mean(), fontsize=12, color='g')  # 在平均值处标注平均值
    # draw p90 value as a horizon line
    plt.axhline(y=df[column].quantile(0.9), color='b', linestyle='--')  # 画一个水平线表示90分位
    # draw a text label nemed p90:value for p90 value besize the line
    plt.text(0, df[column].quantile(0.9), 'p90:%d' % df[column].quantile(0.9), fontsize=12, color='b')  # 在90分位处标注90分
    plt.title("data")  # 设置图形的标题为列名
    plt.show()  # 显示图形

2. 执行脚本生成图片

python draw_csv.py

脚本读取CSV文件,并先后显示每一列的数据统计图

首先是显示第一列CPU占用的数据,可拖拽或者放大查看细节

  • CPU数据统计视图

  • 内存数据统计视图

关闭CPU的统计图之后会显示第二列内存占用的数据,可拖拽或者放大查看细节


关注非科班CPP程序员,一起学习,一起进步

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值