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

devtools/2024/12/22 14:03:31/


 本文先通过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 truedotimestamp=$(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 lineplt.axhline(y=df[column].max(), color='r', linestyle='--')  # 画一个水平线表示最大# draw a text label nemed max:value for max value besize the lineplt.text(0, df[column].max(), 'max:%d' % df[column].max(), fontsize=12, color='r')  # 在最大值处标注最大值# draw mean value as a horizon lineplt.axhline(y=df[column].mean(), color='g', linestyle='--')  # 画一个水平线表示平均# draw a text label nemed mean:value for mean value besize the lineplt.text(0, df[column].mean(), 'mean:%d' % df[column].mean(), fontsize=12, color='g')  # 在平均值处标注平均值# draw p90 value as a horizon lineplt.axhline(y=df[column].quantile(0.9), color='b', linestyle='--')  # 画一个水平线表示90分位# draw a text label nemed p90:value for p90 value besize the lineplt.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程序员,一起学习,一起进步

 


http://www.ppmy.cn/devtools/108905.html

相关文章

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之…

【数学建模国赛思路预约】2024全国大学生数学建模竞赛助攻思路、代码、论文

2024年全国大学生数学建模大赛马上就要开始了,大家有没有准备好呢,今年将会和之前一样,将会在比赛赛中时期为大家提供比赛各题的相关解题思路、可运行代码参考以及成品论文。 一、分享计划表如下所示 1、 赛中分享内容包括(2023国…

关于 ubuntu系统install的cmake版本较低无法编译项目升级其版本 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/141933927 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些…

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.…

【docker】通过云服务器安转Docker

一、前言 这里关于Docker的安转,大家可以采用本地使用虚拟机来运行和安转Docker,我这里呢就采用云服务器来安装Docker,之所以用云服务器安转docker是因为比较简单,只是需要花一点money,而且自己没有用过云服务器所以这里就用这种方式来安转Docker了&…

EasyExcel 学习之 导出 “类型及精度问题”

目录 现象缘由类型问题精度/格式问题精度问题格式问题 解决 现象 Excel 导出时,可能面临几个问题: 类型问题:常见类型转换、URL 转图片等精度/格式问题:数字、日期转换 缘由 类型问题 Excel 常见的 API 有两种,Ea…

【大数据】浅谈Pyecharts:数据可视化的强大工具

文章目录 一、引言二、Pyecharts是什么三、Pyecharts的发展历程四、如何使用Pyecharts1. 安装Pyecharts2. 创建图表(1)导入Pyecharts模块:(2)创建图表实例:(3)添加数据:&…