• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > 编写Bash Shell通过gnuplot绘制系统性能数据图的方法

编写Bash Shell通过gnuplot绘制系统性能数据图的方法

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了gnuplot,gnuplot下载,gnuplot中文教程,gnuplot教程,gnuplot画图等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

使用步骤:
1.设置一个定时任何 执行getperf.sh,采集性能数据
2.将采集到性能数据文件,如:192.168.1.1.tar.gz 解压
3.将性能分析的脚步performance_analyse.sh 放到解压后的目录中
4.安装gnuplot程序(这里下载)

5.将字体文件夹,拷贝到/usr/share/fonts/目录
6.直接运行 bash performance_analyse.sh
getperf.sh脚本内容如下:

#################################################
#说明:
# 定义时间TIMES参数,表示采集的次数,
# 采集时间 = TIMES * INTERVAL
#eg:
# TIMES=180 , INTERVAL=10 采集时间就是半小时
#
#################################################
#!/bin/bash
TIMES=3600
INTERVAL=2
PWD=`pwd`
TIME=`date "+%F %H:%M:%S"`
TAR=`whereis tar|awk -F ":" '{print $2}'|awk '{print $1}'`
SAR=`whereis sar|awk -F ":" '{print $2}'|awk '{print $1}'`
IOSTAT=`whereis iostat|awk -F ":" '{print $2}'|awk '{print $1}'`
# Check Moniter Tool
SysInfo(){
  echo "sysip : $SYSIP"|tee $PWD/$SYSIP/sysinfo
  echo "starttime : $TIME" |tee -a $PWD/$SYSIP/sysinfo
  /sbin/ifconfig >>$PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo
  /usr/sbin/dmidecode >>$PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo
  /bin/cat /proc/cpuinfo >> $PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo
  /sbin/fdisk -l >> $PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo
  /bin/df -Th >>$PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo
  /usr/bin/free -m >> $PWD/$SYSIP/sysinfo
  echo "===================================" >>$PWD/$SYSIP/sysinfo  
  echo ""
}
CheckEnv(){
  PUB_IP=`/sbin/ifconfig |grep "inet addr" | awk -F: '{print $2}'| awk '{print $1}'|grep -v "172\.\|10\.\|127\.\|192\."|sed -n 1p`
  PRI_IP=`/sbin/ifconfig |grep "inet addr" | awk -F: '{print $2}'| awk '{print $1}'|grep "10\.\|127\.\|192\."|sed -n 1p`
  if [ "snda$PUB_IP" == "snda" ];then
    SYSIP=$PRI_IP
  else
    SYSIP=$PUB_IP
  fi
  if [ -d $PWD/$SYSIP ];then
    rm -rf $PWD/$SYSIP
  fi
  mkdir -p $PWD/$SYSIP
  if ! grep iostat /usr/bin/iostat ;then
  yum -y install sysstat
  fi
}
GetPerf(){
  CPUUSAGE="$PWD/$SYSIP/cpuusage.log"
  MEMUSAGE="$PWD/$SYSIP/memusage.log"
  DISKUSAGE="$PWD/$SYSIP/diskusage.log"
  NETWORK="$PWD/$SYSIP/network.log"
  $SAR -P ALL $INTERVAL $TIMES>> $CPUUSAGE &
  $IOSTAT -dkx $INTERVAL $TIMES>> $DISKUSAGE &
  $SAR -n DEV $INTERVAL $TIMES>> $NETWORK &
  $SAR -r $INTERVAL $TIMES>> $MEMUSAGE &
  for ((i=0;i<$TIMES;i++))
  do
    sleep $INTERVAL
  done
}
CheckEnv
SysInfo
GetPerf
#在同一台机器上第二次采集数据时,会删除之前采集的数据,重新采集
#采集完成之后,会生产一个以 IP.tar.gz的压缩包。将这个压缩包,放到
#分析脚本performance_analyse.sh 的同级目录。
if [ -d $PWD/$SYSIP ];then
  cd $PWD
  rm -f $SYSIP.tar.gz
  tar zcvf $SYSIP.tar.gz $SYSIP
fi
</div>

performance_analyse.sh脚本内容如下:

#################################################
#
#  这个脚本的作用是处理由性能采集脚本收集到的性能数据
#然后使用gunplot生产直观的性能图。
#
#################################################
#!/bin/bash
SysInfo(){
  local file=$1
  local productname="unknow"
  local cpumodel="unknow"
  local cpucore="unknow"
  local cpumhz="unknow"
  local physical="unknow"
  local realcpucore="unknow"
  local diskpart="unknow"
  local memory="unknow"
  ipaddr=`cat $file |grep -i "net addr"|grep -v "127"`  
  productname=`cat $file |grep -i "product name"`
  cpumodel=`cat $file |grep -i "model name"|uniq -d`
  cpucore=`cat $file |grep "processor"|wc -l`
  cpumhz=`cat $file |grep -i "cpu MHz"|uniq -d`
  physical=`cat $file |grep -i "physical id"|sort -n|uniq -d|wc -l`
  realcpucore=`cat $file |grep -i "cpu cores"|uniq -d|awk -F ":" '{print $2}'`
  memory=` cat $file |grep -i -EB1 "mem:"`
  diskpart=`cat $file |grep -i "disk"|grep -E "[shv][d][a-z]"`
  echo "System Information:"|tee -a $REPORTFILE
  echo "IP address:"|tee -a $REPORTFILE
  echo -e "$ipaddr"|tee -a $REPORTFILE
  echo "$productname" |tee -a $REPORTFILE
  echo -e "\t$cpumodel" |tee -a $REPORTFILE
  echo -e "\tCPU cores\t:$cpucore"|tee -a $REPORTFILE
  echo -e "\t$cpumhz"|tee -a $REPORTFILE
  echo -e "\tPhysical cpu number:$physical"|tee -a $REPORTFILE
  echo -e "\tEach CPU real core:$realcpucore"|tee -a $REPORTFILE
  echo "$diskpart"|tee -a $REPORTFILE
  echo -e "Memory(MB):\n$memory"|tee -a $REPORTFILE
}
CpuAllUsage(){
  local file=$1
  cat $file|grep -i "all"|grep -v -i -E "average|linux|system" >$GNUPLOTFOLDER/sar_cpu.$$
  TITLE=`cat $file |sed "/^$/d"|grep -v -i "average|linux"|sed 1d|sed -n 1p`
  local SOURCE_SAR_CPU="$GNUPLOTFOLDER/sar_cpu.$$"
  local USER_UASGE=`echo $TITLE |awk '{print $3}'`
  local NICE_UASGE=`echo $TITLE |awk '{print $4}'`
  local SYSTEM_UASGE=`echo $TITLE |awk '{print $5}'`
  local IOWAIT_UASGE=`echo $TITLE |awk '{print $6}'`
  local STEAL_UASGE=`echo $TITLE |awk '{print $7}'`
  local IDLE_UASGE=`echo $TITLE |awk '{print $8}'`
  local cpuusagemax=`cat $SOURCE_SAR_CPU|awk '{print $3+$4+$5+$6+$7}'|sort -r|sed -n 1p`
  local Tmp_ylable=`echo $cpuusagemax|awk -F "." '{print $1}'`
  local ylable=`echo $Tmp_ylable+5|bc`
  local cpuusagemin=`cat $SOURCE_SAR_CPU|awk '{print $3+$4+$5+$6+$7}'|sort|sed -n 1p`
   local cpuusageavg=`awk 'BEGIN{total=0}{total+=$8}END{print 100-total/NR}' $SOURCE_SAR_CPU`
  echo "`date '+%F %H:%M:%S'`: CPU Performance analysis" |tee -a $REPORTFILE
  echo -e "\t1.System Cpu load(%) \tmax=$cpuusagemax,average=$cpuusageavg,mim=$cpuusagemin" |tee -a $REPORTFILE
/usr/local/bin/gnuplot --persist <<EOF 
set term png size 800,600
#================= Cpu usage area pic ===========
set output "TotalCpuUsage.png"
set key title "Total CPU usage(%)"
set key box 3
set key below
set xlabel "times" 
set ylabel "TOTAL CPU USAGE(%)"
set style fill solid 1
set style histogram rowstacked
plot [1:][0:$ylable] '$SOURCE_SAR_CPU' using 3 with histogram lt rgb "#FFB3B3" title "$USER_UASGE",\
'' using 4 with histogram title "$NICE_UASGE",\
'' using 5 with histogram lt rgb "#B3CA7E" title "$SYSTEM_UASGE",\
'' using 6 with histogram lt rgb "#A464BF" title "$IOWAIT_UASGE",\
'' using 7 with histogram title "$STEAL_UASGE",\
'' using 8 with histogram lt rgb "#212121" title "$IDLE_UASGE",\
$cpuusagemax lt 4 lw 2 title "Max Usage ($cpuusagemax%)"
EOF
}
CpuEachCoreUsage(){
  local file=$1
  sed -i 's/PM//g' $file
  local corenu=`cat $file|grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk '{print $2}'|sort -n -r|uniq -d|sed -n 1p`
#  echo $corenu
  PLOT=""
  echo "">$GNUPLOTFOLDER/idle_sum.$$
  for (( i=0;i<=$corenu;i++ ))
  do
    cat $file |grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk "(\$2==$i){print}"|awk '{print $1 ," ",100-$8}'>$GNUPLOTFOLDER/$i.txt
    local idlesum=`awk 'BEGIN{total=0}{total+=$2}END{print total}' $GNUPLOTFOLDER/$i.txt`
    echo $i $idlesum >>$GNUPLOTFOLDER/idle_sum.$$
  done
  first_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 1p|awk '{print $1}'`
  second_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 2p|awk '{print $1}'`
  third_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 3p|awk '{print $1}'`
  load=($first_load $second_load $third_load)
  echo -e "\t2.Each core load:"
  local cpuload=("First" "Second" "Third")
  local nu=0
  for i in ${load[@]}  
  do
    local coreloadmax=`cat $GNUPLOTFOLDER/$i.txt|sort -n -k 2 -r|sed -n 1p|awk '{print $2}'`
    local coreloadavg=`awk 'BEGIN{total=0}{total+=$2}END{print total/NR}' $GNUPLOTFOLDER/$i.txt`
    local coreloadmin=`cat $GNUPL
  


 

您可能想查找下面的文章:

  • 编写Bash Shell通过gnuplot绘制系统性能数据图的方法

相关文章

  • linux 命令每天必学之tar命令
  • bash获取当前路径示例
  • linux压缩常用命令小结
  • shell脚本实现快速生成xml格式sitemap实例分享
  • 5个Shell脚本编程入门练习例子
  • 使用Shell 脚本实现每隔100行插入一条记录且记录第一列包含行号其他列不变
  • 使用Bash Shell对目录中的文件实现递归式拷贝
  • Shell中实现飞行文字效果
  • 用来检测输入的选项$1是否在PATH中的shell脚本
  • shell 中数学计算总结

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Shell脚本实现关闭多余的tty终端
    • Linux下实现SNMP一键安装的Shell脚本
    • Shell脚本传递参数的3种方法比较
    • 把文件复制N份的2个Shell脚本代码
    • Shell编程中的特殊变量之进程状态变量介绍
    • Shell编程 Bash引号的那点事
    • LINUX 查找tomcat日志关键词命令
    • Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)
    • 一天一个shell命令 linux文本操作系列-tree命令详解
    • 监控php-fpm并自动重启服务的shell脚本

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有