shell和Python 两种方法分别画 iostat的监控图
在服务器存储的测试中,经常需要看performance的性能曲线,这样最能直接观察HDD或者SSD的性能曲线。
如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法

1 shell脚本
环境:linux OS gnuplot工具
第一步 :解析iostat log。提取要作图的一行
#!/bin/bash
hdd=$1
cat ${hdd}_iostat.log |grep -i Device |head -1 >${hdd}_iostat.txt
cat ${hdd}_iostat.log |grep -i ${hdd} >>${hdd}_iostat.txt
第二步:把画图的列(监控读写的IOPS)求出来
#!/bin/bash
hdd=$1
cat ${hdd}_iostat.log |grep -i Device |head -1 >${hdd}_iostat.txt
cat ${hdd}_iostat.log |grep -i ${hdd} >>${hdd}_iostat.txt
num_read_iops=`head -1 ${hdd}_iostat.txt | awk '{for (i=1;i<=NF;i++) {if ($i=="r/s") {print i}}}'`
num_write_iops=`head -1 ${hdd}_iostat.txt | awk '{for (i=1;i<=NF;i++) {if ($i=="w/s") {print i}}}'`
第三步:直接调用gnuplot工具作图
#!/bin/bash
hdd=$1
cat ${hdd}_iostat.log |grep -i Device |head -1 >${hdd}_iostat.txt
cat ${hdd}_iostat.log |grep -i ${hdd} >>${hdd}_iostat.txt
num_read_iops=`head -1 ${hdd}_iostat.txt | awk '{for (i=1;i<=NF;i++) {if ($i=="r/s") {print i}}}'`
num_write_iops=`head -1 ${hdd}_iostat.txt | awk '{for (i=1;i<=NF;i++) {if ($i=="w/s") {print i}}}'`
echo "set terminal png set title 'Random_${hdd}_IOPS'set output 'IOPS_${hdd}.png'set xlabel 'count:1s'set ylabel 'IOPS'set key right topplot '${hdd}_iostat.txt' using :$num_write_iops title 'w/s' with lines lw 1,\'${hdd}_iostat.txt' using :$num_read_iops title 'r/s' with lines lw 1" | gnuplot
运行 :bash gnuplot.sh sde

2 python 脚本
环境:python3
python库: sys(引用参数), re(正则匹配), pandas(做表格), matplotlib(画图工具)
第一步:解析iostat log
import sys
import re
import pandas as pd
from matplotlib import pyplot as plt
hdd = sys.argv[1]
rs = []
ws = []
logfile = open(f"{hdd}_iostat.log","r")for log in logfile:if hdd in log:data = re.sub(' +', ' ', log)rs.append(data.split(" ")[3])ws.append(data.split(" ")[4])
第二步:将需要作图的列(这次监控带宽)导入CSV
import sys
import re
import pandas as pd
from matplotlib import pyplot as plt
hdd = sys.argv[1]
rs = []
ws = []
logfile = open(f"{hdd}_iostat.log","r")for log in logfile:if hdd in log:data = re.sub(' +', ' ', log)rs.append(data.split(" ")[3])ws.append(data.split(" ")[4])dic = {"read": rs, "write": ws}
df = pd.DataFrame(dic)
df.to_csv(f"{hdd}_iostat.csv")
data = pd.read_csv(f"{hdd}_iostat.csv")
第三步:用matplotlib库直接作图
import sys
import re
import pandas as pd
from matplotlib import pyplot as plt
hdd = sys.argv[1]
rs = []
ws = []
logfile = open(f"{hdd}_iostat.log","r")for log in logfile:if hdd in log:data = re.sub(' +', ' ', log)rs.append(data.split(" ")[3])ws.append(data.split(" ")[4])dic = {"read": rs, "write": ws}
df = pd.DataFrame(dic)
df.to_csv(f"{hdd}_iostat.csv")
data = pd.read_csv(f"{hdd}_iostat.csv")fig = plt.figure(figsize=(10, 6), dpi=300)
x = data.iloc[:, 0]
y1 = data.iloc[:, 1]
y2 = data.iloc[:, 2]
plt.xlabel(u'time (s)', size=10)
plt.ylabel("BW(kB/s)")
plt.plot(x, y1, label='rKB/s', color='orange', linestyle=':')
plt.plot(x, y2, label='wKB/s', color='cyan', linestyle='-.')
plt.legend(loc="upper right")
plt.title(f"{hdd}_BW")
plt.grid(alpha=0.4)
plt.savefig(str(hdd) + ".png")
运行 :python3 plot.py sde

相关文章:
shell和Python 两种方法分别画 iostat的监控图
在服务器存储的测试中,经常需要看performance的性能曲线,这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…...
设计模式(9)建造者模式
一、 1、概念:将一个复杂对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化;建造…...
PHP 创业感悟交流平台系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP 创业感悟交流平台系统(含论坛)是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载: https://download.csdn.…...
工作流程引擎之flowable(集成springboot)
0、背景 现状:公司各部门业务系统有各自的工作流引擎,也有cross function的业务在不同系统或OA系统流转,没有统一的去规划布局统一的BPM解决方案,近期由于一个项目引发朝着整合统一的BPM方案,特了解一下市面上比较主流…...
leetcode54. 螺旋矩阵(java)
螺旋矩阵 题目描述解题 收缩法 上期经典算法 题目描述 难度 - 中等 原题链接 - leecode 54 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例1: 输入:matrix [[1,2,3],[4,5,6],[7…...
go gorm 查询
定义model package mysqltestimport ("errors""fmt""gorm.io/gorm" )type Product struct {gorm.ModelID uint gorm:"primarykey"Name string gorm:"column:name"Price float64 gorm:"column:price_value&quo…...
Flutter GetXController 动态Tabbar 报错问题
场景: 1.Tabbar的内容是接口获取的 2. TabController? tabController;; 在onInit 方法中初始化tabbarController tabController TabController(initialIndex: 0, length: titleDataList.length, vsync: this); 这时候会报一个错误 Controllers l…...
Redis(缓存预热,缓存雪崩,缓存击穿,缓存穿透)
目录 一、缓存预热 二、缓存雪崩 三、缓存击穿 四、缓存穿透 一、缓存预热 开过车的都知道,冬天的时候启动我们的小汽车之后不要直接驾驶,先让车子发动机预热一段时间再启动。缓存预热是一样的道理。 缓存预热就是系统启动前,提前将相关的…...
UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)
目录 创建空模板 创建粒子 粒子的基础属性 粒子的生命周期 颜色 大小设置 生成的位置 Skeletal Mesh Location的效果: Shape Location 添加速度 添加Noise力场 在生成中添加: 效果: 编辑 在更新中添加: 效果&…...
from moduleA import * 语句 和import moduleA 的区别
from moduleA import * 语句和import moduleA 的区别是: from moduleA import * 语句会将moduleA模块中的所有内容(函数、变量、类等)直接导入到当前模块的命名空间中,这样就可以直接使用它们,而不需要加上模块名的限…...
【leetcode 力扣刷题】交换链表中的节点
24. 两两交换链表中的节点 24. 两两交换链表中的节点两两节点分组,反转两个节点连接递归求解 24. 两两交换链表中的节点 题目链接:24. 两两交换链表中的节点 题目内容: 题目中强调不能修改节点内部值,是因为如果不加这个限制的话…...
学会Mybatis框架:让你的代码更具灵活性、可维护性、安全性和高效性【二.动态SQL】
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Mybatis动态SQL如何应用 1.需求 2.…...
Oracle 中 ROWNUM 使用问题记录
ROWNUM 使用问题记录(2023-08-17) Oracle 版本: 19.0.0.0.0 Enterprise现象:今天在项目遇到一个问题,测试人员反馈前一天能看到的数据今天看不到了 用表格举例,这是前一天看到的数据,有9、7、1 这几个数量信息 日期…...
MySQL数据库:内置函数
日期函数 规定:日期:年月日 时间:时分秒 函数名称作用描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_type)在date中添加…...
【C++杂货铺】探索string的底层实现
文章目录 一、成员变量二、成员函数2.1 默认构造函数2.2 拷贝构造函数2.3 operator2.4 c_str()2.5 size()2.6 operator[ ]2.7 iterator2.8 reserve2.9 resize2.10 push_back2.11 append2.12 operator2.13 insert2.14 erase2.15 find2.16 substr2.17 operator<<2.18 opera…...
c++ day1
定义一个命名空间Myspace,包含以下函数:将一个字符串中的所有单词进行反转,并输出反转后的结果。例如,输入字符串为"Hello World",输出结果为"olleH dlroW",并在主函数内测试该函数。 …...
变动的Python爬虫实现
在电商时代,了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例,您将能够轻松监控商品价格,并及时做出决策。 一、了解需求和目标 在…...
mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除
写在前面: 本文主要介绍mybatis-plus的配置,以后在有的时候在补充。欢迎交流。 文章目录 日志输出自动填充分页全局字段配置多数据源 日志输出 调试的时候需要看执行的sql,这时候就很需要日志来记录查看了。 mybatis-plus的日志配置在yml…...
数据API服务管理功能:解放数据潜力,提升业务效率
数据API服务的重要性 在数字化时代,数据被认为是企业的重要资产。数据API服务的管理功能能够有效帮助企业实现数据的整合和利用。通过合理的数据API服务管理,企业可以更好地解放数据潜力,提升业务效率。 解放数据潜力 数据API服务管理功…...
云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力
据统计,每一场破坏性地震发生后,会引发次生的灾害,而火灾是其中之一。导致火灾的原因,推测是地震时使供电线路短路,引燃易燃物,火灾就随即发生。所以,在日常生活中,定期的消防演练还是非常必要的, VR消防,是VR公司深圳华锐视点利用VR虚拟现实技术,将VR和…...
终极PT资源管理指南:如何用auto_feed_js实现100+站点一键转载
终极PT资源管理指南:如何用auto_feed_js实现100站点一键转载 【免费下载链接】auto_feed_js PT站一键转载脚本 项目地址: https://gitcode.com/gh_mirrors/au/auto_feed_js 在PT(Private Tracker)社区中,资源分享是核心价值…...
Zsh插件实现Git输出路径美化:绝对路径转相对路径原理与实践
1. 项目概述与核心价值最近在终端里敲git status或者git diff的时候,你是不是也经常被那一长串的绝对路径搞得有点烦躁?尤其是在一个嵌套比较深的项目里,输出的文件路径长得能占满半个屏幕,想快速定位到具体是哪个文件改了&#x…...
意义如何保持活性:一项基于岐金兰哲学体系的系统性阐释
意义如何保持活性:一项基于岐金兰哲学体系的系统性阐释导论:一座理论大厦的蓝图本文旨在对岐金兰哲学体系进行系统性阐释。这一体系围绕一个核心问题展开:意义如何在系统中保持活性,而非走向僵死?这一追问看似抽象&…...
RevokeMsgPatcher:微信/QQ/TIM防撤回补丁工具完全指南
RevokeMsgPatcher:微信/QQ/TIM防撤回补丁工具完全指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.co…...
如何高效清理重复图片?AntiDupl.NET智能去重工具详解
如何高效清理重复图片?AntiDupl.NET智能去重工具详解 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 在数字资产管理中,重复文件清理已成为提升…...
如何通过HWInfo插件实现精准硬件监控与风扇控制:完整配置指南
如何通过HWInfo插件实现精准硬件监控与风扇控制:完整配置指南 【免费下载链接】FanControl.HWInfo FanControl plugin to import HWInfo sensors. 项目地址: https://gitcode.com/gh_mirrors/fa/FanControl.HWInfo 想要让电脑散热系统更智能、更安静吗&#…...
从AlexNet到R-CNN:我是如何用迁移学习在VOC数据集上实现目标检测精度翻倍的
从AlexNet到R-CNN:迁移学习在目标检测中的工程实践与精度突破 当我们在2012年第一次看到AlexNet在ImageNet竞赛中碾压传统方法时,很少有人能预见这个突破会如何彻底改变计算机视觉的格局。但就在一年后,R-CNN的诞生将这一变革延伸到了目标检测…...
Android开发终极指南:Sunflower项目中ViewModel数据共享的最佳实践
Android开发终极指南:Sunflower项目中ViewModel数据共享的最佳实践 【免费下载链接】sunflower A gardening app illustrating Android development best practices with migrating a View-based app to Jetpack Compose. 项目地址: https://gitcode.com/gh_mirro…...
如何在PC上快速配置yuzu模拟器:完整游戏体验指南
如何在PC上快速配置yuzu模拟器:完整游戏体验指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在电脑上畅玩任天堂Switch游戏吗?yuzu模拟器是你的最佳选择!作为目前最成熟的…...
【高光谱图像数据处理实战】基于Python的ENVI图像交互式裁剪与光谱数据预处理
前言在处理高光谱图像数据(Hyperspectral Imaging, HSI)时,我们常常需要面对两个核心问题:一是如何从庞大的三维数据立方体(Data Cube)中高效、准确地提取感兴趣区域(ROI)…...
