shell脚本下用plot给iostat和CPU的采样画图的写法

news2025/1/17 22:56:56

目前大多的互联网客户,在导入SSD之前,基本会要求OEM或者SSD厂商提供一些性能数据图,所以 作图也基本成了测试人员的必备技能,单盘的性能可以用Excel表格导入,但是复杂的可能会比较麻烦。就需要我们借助工具来作图了。
本篇文章简单介绍用plot工具对CPU和iostat采样的一个简单的shell脚本
一 fio lat 采样
1 生成一段监控lat的文件

fio --name=lat_plot --filename=/dev/sdb --ioengine=libaio --rw=read --bs=128k --iodepth=64 --numjobs=1  --runtime=30 --time_based   --size=100m  --direct=1 --thread=1 --write_lat_log=sdbread --log_avg_msec=1000

2 第一列代表时间;第二列代表延迟;第三列 0表示读
在这里插入图片描述
3 解析一下lat log, 方便作图

for time in `cat sdbread_lat.1.log  |awk '{print $1}'|sed 's/,//g'`;do echo $(expr $time/1000|bc) >> time.txt;done

#将时间转化为秒
在这里插入图片描述

for time in `cat sdbread_lat.1.log  |awk '{print $2}'|sed 's/,//g'`;do echo $(expr $time/1000000|bc)>>lat.txt ;done 

#将延迟转化为ms
在这里插入图片描述
4 合并两列成为一个新的文档 方便作图
paste time.txt lat.txt >>time_lat.txt
5 配置一下plot参数
在这里插入图片描述

echo "
				set terminal png 
                set title 'readlat'
                set output 'readlat.png'
                set xlabel 's'
                set ylabel  'lat(ms)'
				unset key
				set xtics 0,3,30
				set xrange [0:30]
				set ytics 0,5,50
				set yrange [0:50]
				set key bottom outside horizontal center
                plot 'time_lat.txt' using 1:2 with lp pt 5
        " |gnuplot

6 运行脚本 效果如下:
在这里插入图片描述
二 CPU核数采样
1 指令sar -P ALL 监控CPU每个核数的使用率
for i in {1…10};do sar -P ALL >>sar.log;sleep 1;done 每隔1秒 监控一次 共监控10次
2 cat sar.log |grep -i Average >sar_user.log
在这里插入图片描述
3 取每个CPU核数对应的占用率,并保存(需要写循环)
a.获取CPU核个数cat /proc/cpuinfo| grep “processor”| wc -l(总核数:物理核+逻辑核)
在这里插入图片描述
b.获取某个CPU核数的使用率 cat sar_user.log |awk ‘$2==‘255’ {print $0}’(获取255核数的 每次使用率)
在这里插入图片描述
c.获取CPU的最大核数: expr cat /proc/cpuinfo| grep "processor"| wc -l - 1
在这里插入图片描述
d.将每个核数的使用率转化为对应文档
在这里插入图片描述
4 接下来是plot的一些固定格式:
在这里插入图片描述
5 画线 ,需要把每个CPU核使用率的折线添加到图片
在这里插入图片描述
6 完整版代码如下:

#!/bin/bash
num=`cat /proc/cpuinfo| grep "processor"| wc -l`
for i in {1..10};do sar -P ALL >>sar.log;sleep 1;done 
cat sar.log |grep -i Average >sar_user.log
for i in $(seq 0  $(expr $num - 1 ))
do        
cat sar_user.log |awk '$2=='$i' {print $0}'>cpu_$i.txt
echo "'cpu_$i.txt' using :3  title 'cpu-$i' with lines lw 1,"|awk '{printf $0}' >>plot.txt
done
plotadd=`cat plot.txt`
       echo " 
              set terminal png size 2000,1200
      	      set size 1,1
            	set title 'CPU'
            	set output 'CPU.png'
            	set xlabel 'count /s'
            	set ylabel  'cpu%'
              set key bottom outside horizontal center
            	plot $plotadd
      	" |gnuplot

7 效果图如下:因为时间太短 显示不明显
在这里插入图片描述
8 长时间对硬盘做读写的CPU监控图 如下图:
在这里插入图片描述
三 iostat 采样
1 首先准备一个有多盘IO数据的iostat log
2 获取iostat 要解析的数据的列
cat iostat.log |grep -i Device |head -1 | awk ‘{for (i=1;i<=NF;i++) {if ($i==“rMB/s”) {print i}}}’
在这里插入图片描述
3 写入循环中(因为其有9个盘,OS盘符是nvme0n1)
在这里插入图片描述
4 配置一下plot参数

#!/bin/bash
num_read=`cat iostat.log |grep -i Device |head -1 | awk  '{for (i=1;i<=NF;i++) {if ($i=="rMB/s") {print i}}}'`
for nvme in nvme{1..9}n1
do                        
	cat iostat.log |grep -i $nvme |sed 1,10d >${nvme}_read.txt
	echo "'${nvme}_read.txt' using :$num_read title '${nvme}read' with lines lw 1," |awk '{printf $0}' >>plot_read.txt          
done
plotread=`cat plot_read.txt` 
       echo "
        set terminal png size 1200,900	
      	set title 'ReadBW'
      	set output 'readBW.png'
      	set xlabel 'count:10s'
      	set ylabel  'bandwith'
        set key bottom outside horizontal center
	      plot $plotread	
      	" | gnuplot

5 运行如下图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第9章 Apache-Dbutils实现CRUD操作

1. Apache-DBUtils简介 *commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库&#xff0c;它是对JDBC的简单封装&#xff0c;学习成本极低&#xff0c;并且使用dbutils能极大简化jdbc编码的工作量&#xff0c;同时也不会影响程序的性能。 *API介绍&#xff1a; org.…

java和vue的大学生奖学金助学金系统奖学金系统助学金系统

简介 大学生奖学金助学金系统。学生申请自己需要的奖助学金&#xff0c;上传证明材料。该学院的辅导员可以下载学生的证明材料以及根据学生的综合成绩来审核是否通过&#xff0c;若不通过请输入不通过原因。管理员可以导入学生excel和辅导员excel以及学生综合成绩excel、分布公…

鲲鹏代码迁移工具介绍

鲲鹏代码迁移工具介绍 代码迁移工具介绍 代码迁移工具是什么&#xff1f; ✨我们为什么会需要用到代码迁移工具&#xff1f; ✨处理器所支持的指令集不同&#xff0c;意味着开发者可能需要对代码进行跨平台的迁移。 这里我们常见到便是x86平台的代码往arm平台进行迁移 通常…

主流组件库学习

主流组件库差异性对比 NutUI - 京东研发的移动端 UI 组件库&#xff0c;支持 Vue3、Taro 多端适配&#xff0c;面向电商业务场景Vant - 有赞研发的移动端 UI 组件库&#xff0c;支持 Vue3、微信小程序、支付宝小程序TDesign Mobile - 腾讯研发的移动端组件库&#xff0c;适合在…

Redis第二章_实战篇_短信登录+缓存策略+秒杀+分布式锁>>

Redis第二章_实战篇_短信登录缓存策略秒杀分布式锁>> 文章目录Redis第二章_实战篇_短信登录缓存策略秒杀分布式锁>>开篇导读1、短信登录1.1、导入黑马点评项目1.1.1 、导入SQL1.1.2、有关当前模型1.1.3、导入后端项目1.1.4、导入前端工程1.1.5 运行前端项目1.2 、基…

Spring(十一)- Spring Bean的依赖注入注解

文章目录一、Spring Bean的依赖注入注解1. 通过Value直接注入普通属性2. 通过Value注入properties文件中的属性3. Autowired注解&#xff0c;用于根据类型进行注入4. Qualifier配合Autowired可以完成根据名称注入Bean实例&#xff0c;使用Qualifier指定名称5. Resource注解既可…

三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant

三款Zookeeper可视化工具、ZooInspector、prettyZoo、ZooKeeperAssistant①Zookeeper图形化工具&#xff1a;ZooInspector1.下载完后&#xff0c;解压压缩包&#xff0c;进入zookeeper-dev-ZooInspector.jar目录后执行run jar包命令2.登录客户端&#xff1a;输入zk服务的ip和端…

XCTF1-web disabled_button weak_auth view_source cookie backup

一个不能按的按钮 题目描述 X老师今天上课讲了前端知识&#xff0c;然后给了大家一个不能按的按钮&#xff0c;小宁惊奇地发现这个按钮按不下去&#xff0c;到底怎么才能按下去呢&#xff1f; 进入场景 题目提示为前端设置的问题&#xff0c;查看网页源码&#xff0c;定位…

Django + Nginx https部署实战(第二辑)

如何使用Nginx把网站升级为Https&#xff1f; Https是Http协议的升级版&#xff0c;由于证书的引入&#xff0c;使得用户与网站之间的通讯变得更加安全。 在使用https之前&#xff0c;我们必须了解的事情 证书颁发机构 证书颁发机构是一家知名且受信任的组织&#xff0c;它对网…

基于MMDetection训练VOC格式数据集

一 环境说明 基于前述安装MMDetection&#xff0c;数据集为VOC格式&#xff0c;主要版本如下&#xff1a; Python&#xff1a;3.7.8 CUDA&#xff1a;11.3 cuDNN&#xff1a;8.4.0 torch&#xff1a;1.12.0 torchvision&#xff1a;0.13.0 mmcv-full&#xff1a;1.6.0 MMDetec…

机器学习极简入门笔记-5-无监督学习-K-means

目录 第17章 KNN算法&#xff08;有监督学习算法&#xff0c;放在此位置是为了与下一章的K-means做对比&#xff09; 17.1 KNN算法原理 17.2 KNN中的K 第18章 K-means——最简单的聚类算法 18.1 K-means算法步骤 18.2 K-means算法具体细节 18.3 启发式算法 18.4 K-mean…

介绍a股level2数据接口委托队列的作用

a股level2数据接口可以实现量化交易的准确性&#xff0c;那用户在交易的过程中会发现在“委托队列”中&#xff0c;如果出现一些有规律性的单子&#xff0c;往往是主力之间的盘口暗语。 例如排在靠前的都是大单&#xff0c;封单相当坚决&#xff0c;如果细心一点还会发现都是拖…

Spring Security 自定义拦截器Filter实现登录认证

前言 需求来源: 微信小程序获取授权码code, 通过授权码code, 获取微信用户信息(比如openid,unionId), 并记录登录状态(比如token信息的获取); 原本打算使用Spring Security中OAuth2.0的机制 实现用小程序登录&#xff0c;发现小程序再已经获取授权码code登录流程和Spring Secu…

Intellij插件之~图形界面Swing UI Designer

资料 Java Swing 介绍 JavaFX快速入门 Java Swing 图形界面开发简介 GUI Designer Basics scrcpy ScrcpyController Services&#xfeff; 创建一个Gui Form文件(类form文件) 创建一个Gui Form 此时生成两个类, 是自动关联的 鼠标可以拖入控件,每拖入一个组件,在TestForm…

领悟《信号与系统》之 信号与系统的描述-下节

信号与系统的描述-下节一、信号的基本运算1. 信号的基本运算1. 加法 、减法2. 乘法、除法3. 微分 、差分4.积分、迭分2. 关于时间&#xff08;自变量&#xff09;的运算1. 位移2. 反折3. 尺度变换二、阶跃信号与冲激信号1. 单位阶跃信号2. 单位阶跃信号的特性3. 单位冲激信号4.…

Android架构师学习必备学习宝典《Android架构开发手册》

吐槽 我想每个程序员在写代码的时候可能都有这些历程(夸张)&#xff1a; 这坨代码谁写的&#xff0c;怎么要这样写啊&#xff0c;我这个需求该怎么加代码&#xff01;(尝试在shit山上小心地走&#xff0c;并添加新代码)写的好难受&#xff0c;shit越改越chou了…算了&#xf…

协程设计原理

文章目录1、协程的背景1.1、同步与异步1.2、为什么使用协程1.3、协程的适用场景2、协程的原语操作3、协程的切换3.1、汇编实现4、协程的定义4.1、多状态集合设计4.2、调度器的定义4.2、调度策略生产者消费者模式多状态运行5、api 封装5.1、hook 机制5.2、hook 函数原型5.3、hoo…

React笔记——github案例(用到axios 和 pubsub)

案例github用上脚手架配置代理 1.完成静态页面构建 小技巧&#xff1a;先在原html页面搜索最外侧框 是否有样式存在&#xff0c;如果样式不存在则不需要剪切过去 给需求或效果分好组件&#xff0c;分别是 Search 和 List 、App 组件 class都改为 className 给图片添加上特定…

JS高级(二):继承、数组的一些api、Object.defineProperty()、call、apply、bind

JavaScript高级&#xff08;二&#xff09;一、继承1.call方法改变this指向2.构造函数中模拟类的super实现属性继承3.构造函数借助原型对象实现方法继承4.类的本质二、ES5几个新增方法1.数组forEach()2.数组filter()3.数组some()4.字符串trim()三、Object.definProperty()四、改…

基于STM32结合CubeMX学习Free-RT-OS的源码之深入学习软件定时器实现过程

概述 关于在CUBEMX上的配置 介绍 软件定时器基于硬件定时器实现。 软件定时器允许设置一段时间&#xff0c;当设置的时间到达之后就执行指定的功能函数&#xff0c;被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期&#xff0c;…