linux下利用gnuplot画图的方法

目前大多的互联网客户,在导入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 运行如下图
在这里插入图片描述
9 画柱状图
把下面这个txt文档的内容画图
dev type bandwidth iops
nvme1n1 read 7740 92600
nvme2n1 read 7750 92600
nvme3n1 read 7740 92500
nvme4n1 read 7740 92500
nvme5n1 read 7840 92600
nvme6n1 read 7940 92600
nvme7n1 read 7740 92500
nvme8n1 read 7940 92500
nvme9n1 read 7940 92600
nvme10n1 read 7640 92600
代码如下

echo "
				set terminal png size 1200,980
				set style data histogram 
				set style histogram clustered gap 1
				set style fill solid 0.4 border
				set xtics rotate by -45
				set title 'seq_read'
				set output 'nvme.png'
				set ylabel   'bandwith/MB/s'
				plot 'readplot.txt' using 3: xticlabels (1) title columnheader (3), 'readplot.txt' using 4: xticlabels (1) title columnheader (4)
			" |gnuplot	

执行这个脚本 如下;
在这里插入图片描述
10 画单个柱状图

echo "
				set terminal png size 1200,980
				set style data histogram 
				set style histogram clustered gap 1
				set style fill solid 0.4 border
				set xtics rotate by -45
				set title 'seq_read'
				set output 'nvme1213.png'
				set ylabel   'bandwith/MB/s'
				plot 'readplot.txt' using 3: xticlabels (1) title columnheader (3)
				"|gnuplot

在这里插入图片描述
11 如果文件没有标题 会默认平均值
nvme1n1 read 7740 92600
nvme2n1 read 7750 92600
nvme3n1 read 7740 92500
nvme4n1 read 7740 92500
nvme5n1 read 7840 92600
nvme6n1 read 7940 92600
nvme7n1 read 7740 92500
nvme8n1 read 7940 92500
nvme9n1 read 7940 92600
nvme10n1 read 7640 92600
图如下:
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用shell脚本 gnuplot画图,你可以按照以下步骤进行操作: 1. 首先,你需要将数据保存为一个文本文件,比如netstat.txt。你可以使用命令将数据重定向到文件中,例如: ``` netstat > netstat.txt ``` 2. 接下来,你需要进入gnuplot绘图命令模式。你可以在终端中输入`gnuplot`命令来进入绘图模式。 3. 在gnuplot绘图命令模式下,你可以使用`load`命令加载刚才保存的数据文件,比如: ``` load "netstat.txt" ``` 4. 此外,你还可以在shell模式下使用gnuplot绘图指令来生成图形。比如,你可以使用以下指令设置终端、输出文件、标题、坐标轴等属性: ``` set terminal png size 1400,700 font "/usr/share/fonts/kingsoft/simfang.ttf,14" set output "ab测试结果.png" set title "ab测试" set size 1,0.8 set grid y set xlabel "并发数" set xrange [0:2000] set ylabel "响应时间(ms)" set yrange [0:100] set ytics nomirror set y2label "吞吐率" set y2tics ``` 5. 最后,你可以使用`plot`命令来绘制图形。你可以指定要使用的数据文件、要绘制的曲线类型、点形状和标题等。例如: ``` plot "ab-result.dat" using 1:4 smooth sbezier with linespoint pointtype 2 title "吞吐率", \ "ab-result.dat" using 1:3 smooth sbezier with linespoint pointtype 3 axis x1y2 title "响应时间/y2轴" ``` 这样,你就可以使用shell脚本 gnuplot画图了。记得根据你的具体需求和数据文件格式进行相应的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值