侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

技术  /  管理员 发布于 7年前   146

使用步骤:
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/bashTIMES=3600INTERVAL=2PWD=`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 ToolSysInfo(){  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}CheckEnvSysInfoGetPerf#在同一台机器上第二次采集数据时,会删除之前采集的数据,重新采集#采集完成之后,会生产一个以 IP.tar.gz的压缩包。将这个压缩包,放到#分析脚本performance_analyse.sh 的同级目录。if [ -d $PWD/$SYSIP ];then  cd $PWD  rm -f $SYSIP.tar.gz  tar zcvf $SYSIP.tar.gz $SYSIPfi

performance_analyse.sh脚本内容如下:

###################################################  这个脚本的作用是处理由性能采集脚本收集到的性能数据#然后使用gunplot生产直观的性能图。###################################################!/bin/bashSysInfo(){  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 3set key belowset xlabel "times" set ylabel "TOTAL CPU USAGE(%)"set style fill solid 1set style histogram rowstackedplot [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 $GNUPLOTFOLDER/$i.txt|sort -n -k 2|sed -n 1p|awk '{print $2}'`         echo -e "\t\t\t Load ${cpuload[$nu]} core $i : max=$coreloadmax , avg=$coreloadavg , min=$coreloadmin"|tee -a $REPORTFILE    nu=`echo $nu+1|bc`  done    for ((i=0;i<=corenu;i++))  do    if [ $i -eq $first_load ];then      LW=4    elif [ $i -eq $second_load ];then      LW=3    elif [ $i -eq $third_load ];then      LW=2    else      LW=1    fi    TMP1="$GNUPLOTFOLDER/$i.txt"     TMP2="using 1:2 with l lw $LW"    TMP3="core $i "    PLOT="$PLOT \"$TMP1\" $TMP2 title \"$TMP3\","       done  local tmp_ylabel_range=`cat $file|grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk '{print 100-$8}'|sort -n -r|sed -n 1p|awk -F "." '{print $1}'|sed -n 1p`  local ylabel_range=`echo $tmp_ylabel_range+5|bc`/usr/local/bin/gnuplot --persist <<EOF#=============== Each core usage =====================set term png size 800,600set output "CpuCoreIdle.png"set key title "Each Core Usage(%)"set key box 3set key belowset ylabel "CPU Core Usage(%)" set xdata timeset timefmt "%H:%M:%S"plot [:][0:$ylabel_range] $PLOTEOF}MemoryUsage(){  local file=$1  local title=`cat $file |sed '/^$/d'|grep -i -E -v "average|linux"|grep -i mem`  sed -i 's/PM//g' $file  local kbmemused=`echo $title|awk '{print $3}'`   local memused=`echo $title|awk '{print $4}'`   local kbbuffers=`echo $title|awk '{print $5}'`   local kbcached=`echo $title|awk '{print $6}'`   local kbcommit=`echo $title|awk '{print $7}'`   cat $file |sed '/^$/d'|grep -i -E -v "average|linux"|grep -i -v mem|awk '{print $1,$2/1024,($2+$3)/1024,$3/1024,$4,$5/1024,$6/1024}'>$GNUPLOTFOLDER/memory.$$  SOURCE_FILE=$GNUPLOTFOLDER/memory.$$  local memtotal=`awk 'BEGIN{total=0}{total+=$3}END{print total/NR}' $SOURCE_FILE`  local memusedmax=`awk '{print $4}' $SOURCE_FILE|sort -n -r|sed -n 1p`  local memusedavg=`awk 'BEGIN{total=0}{total+=$4}END{print total/NR}' $SOURCE_FILE`  local memusedmin=`awk '{print $4}' $SOURCE_FILE|sort -n|sed -n 1p`  local memfreemax=`awk '{print $2}' $SOURCE_FILE|sort -n -r|sed -n 1p`  local memfreeavg=`awk 'BEGIN{total=0}{total+=$2}END{print total/NR}' $SOURCE_FILE`  local memfreemin=`awk '{print $2}' $SOURCE_FILE|sort -n|sed -n 1p`  local memcachemax=`awk '{print $7}' $SOURCE_FILE|sort -n -r|sed -n 1p`  local memcacheavg=`awk 'BEGIN{total=0}{total+=$7}END{print total/NR}' $SOURCE_FILE`  local memcachemin=`awk '{print $7}' $SOURCE_FILE|sort -n|sed -n 1p`  local memused_cachemax=`awk '{print $4-$7}' $SOURCE_FILE|sort -n -r|sed -n 1p`  local memused_cacheavg=`awk 'BEGIN{total=0}{total+=($4-$7)}END{print total/NR}' $SOURCE_FILE`  local memused_cachemin=`awk '{print $4-$7}' $SOURCE_FILE|sort -n|sed -n 1p`  local used_percent=`awk 'BEGIN{total=0}{total+=$5}END{print total/NR}' $SOURCE_FILE`  echo "`date '+%F %H:%M:%S'`: Memory usage analysis" |tee -a $REPORTFILE  echo -e "\t\t1.total memory: $memtotal MB"|tee -a $REPORTFILE  echo -e "\t\t2.memory used: max=$memusedmax MB ,avg=$memusedavg MB ,min=$memusedmin MB"|tee -a $REPORTFILE  echo -e "\t\t3.memory free: max=$memfreemax MB ,avg=$memfreeavg MB ,min=$memfreemin MB"|tee -a $REPORTFILE  echo -e "\t\t4.memory cache: max=$memcachemax MB ,avg=$memcacheavg MB ,min=$memcachemin MB"|tee -a $REPORTFILE  echo -e "\t\t4.memory used-cache: max=$memused_cachemax MB ,avg=$memused_cacheavg MB ,min=$memused_cachemin MB"|tee -a $REPORTFILE/usr/local/bin/gnuplot --persist <<EOFset term png size 800,600set output "MemoryUsage.png"set key title "Memory Use state"set key box 3set key belowset ylabel "MB"set y2label "(%)"set x2range [0:]set y2range [0:100]set xdata timeset timefmt "%H:%M:%S"set xtics;set x2tics;set ytics ;set y2tics;plot '$SOURCE_FILE' using 1:3 w p title "Total Memory",'' using 1:4 w p title "Used",'' using 1:7 w p title "Cached" ,\'' using 5 with l lt rgb "red" title "memused($used_percent%)" axis x2y2EOF}DiskUsage(){  local file=$1  cat $file |sed "/^$/d"|grep -v -i -E "device|linux"|sed 1d >$GNUPLOTFOLDER/disk.$$  local SOURCE_FILE=$GNUPLOTFOLDER/disk.$$  plot_readiops=""  plot_writeiops=""  local nu=1  echo "`date '+%F %H:%M:%S'`: Disk Performance analysis" |tee -a $REPORTFILE  for diskpart in `cat $file |sed '1,2d'|grep -v -i "device"|awk -F " " '{print $1}'|sort|uniq -d|sed '/^$/d'|grep -E "^[a-z][a-z][a-z]$"`  do    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE >$GNUPLOTFOLDER/gnu_tmpfile.$diskpart    plot_readiops="$plot_readiops \"$GNUPLOTFOLDER/gnu_tmpfile.$diskpart\" using 4 w l title \"$diskpart read IOPS\","    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk 'BEGIN{total=0}{total+=$4}END{print total/NR}'>$GNUPLOTFOLDER/t.$$    local read_avg_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $4}'|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$    local read_min_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $4}'|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$    local read_max_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    plot_writeiops="$plot_writeiops \"$GNUPLOTFOLDER/gnu_tmpfile.$diskpart\" using 5 w l title \"$diskpart write IOPS\","         awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk 'BEGIN{total=0}{total+=$5}END{print total/NR}'>$GNUPLOTFOLDER/t.$$    local write_avg_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $5}'|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$    local write_min_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $5}'|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$    local write_max_iops=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$         awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk 'BEGIN{total=0}{total+=$6}END{print total/NR}'>$GNUPLOTFOLDER/t.$$    local avg_read_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $6}'|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$    local min_read_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $6}'|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$    local max_read_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk 'BEGIN{total=0}{total+=$7}END{print total/NR}'>$GNUPLOTFOLDER/t.$$    local avg_write_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $7}'|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$    local min_write_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $7}'|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$    local max_write_throughput=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$         awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk 'BEGIN{total=0}{total+=$10}END{print total/NR}'>$GNUPLOTFOLDER/t.$$    local avg_await=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $10}'|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$    local min_await=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$    awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk '{print $10}'|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$    local max_await=`cat $GNUPLOTFOLDER/t.$$`    rm -f $GNUPLOTFOLDER/t.$$         echo -e "\t\t$nu.$diskpart performance:"|tee -a $REPORTFILE    echo -e "\t\t\t read iops:\t\t max=$read_max_iops ,\t avg=$read_avg_iops ,\t min=$read_min_iops"|tee -a $REPORTFILE    echo -e "\t\t\t write iops:\t\t max=$write_max_iops ,\t avg=$write_avg_iops ,\t min=$write_min_iops"|tee -a $REPORTFILE    echo -e "\t\t\t read data per second:\t max=$max_read_throughput KB,\t avg=$avg_read_throughput KB,\t min=$min_read_throughput KB"|tee -a $REPORTFILE    echo -e "\t\t\t write data per second:\t max=$max_write_throughput KB,\t avg=$avg_write_throughput KB,\t min=$min_write_throughput KB"|tee -a $REPORTFILE    echo -e "\t\t\t each io wait time:\t max=$max_await ms ,\t avg=$avg_await ms ,\t min=$min_await ms"|tee -a $REPORTFILE  done     /usr/local/bin/gnuplot --persist <<EOFset term png size 800,600set output "DiskIOPSPerformance.png"set key title "Disk IOPS"set key box 3set key belowset ylabel "IOPS"plot $plot_readiops $plot_writeiopsEOF}NetworkPerformance(){    local file=$1    sed -i 's/PM//g' $file    cat $file |grep -E "eth|em"|grep -v -i "average">$GNUPLOTFOLDER/network_sourcefile.txt    local sourcefile=$GNUPLOTFOLDER/network_sourcefile.txt    local titlerxpackage=`cat $file |grep -i "IFACE"|awk '{print $3}'|uniq -d`    local titletxpackage=`cat $file |grep -i "IFACE"|awk '{print $4}'|uniq -d`    local titlerxbyte=`cat $file |grep -i "IFACE"|awk '{print $5}'|uniq -d`    local titletxbyte=`cat $file |grep -i "IFACE"|awk '{print $6}'|uniq -d`    if [ $titlerxbyte == 'rxkB/s' ];then      unit="KB"    elif [ $titlerxbyte == 'rxbyt/s' ];then      unit="byte"    fi    local rxpackage=''    local txpackage=''    local rxbyte=''    local txbyte=''    local nu=1    echo "`date '+%F %H:%M:%S'`: Network Performance analysis" |tee -a $REPORTFILE    for netcard in `cat $file |grep -E "eth|em"|grep -v -i "average"|awk '{print $2}'|sort|uniq -d`    do      cat $sourcefile|grep $netcard>$GNUPLOTFOLDER/gnu_network.$netcard      rxpackage="$rxpackage \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:3 w l title \"$netcard $titlerxpackage\","      txpackage="$txpackage \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:4 w l title \"$netcard $titletxpackage\","      rxbyte="$rxbyte \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:5 w l title \"$netcard $titlerxbyte\","      txbyte="$txbyte \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:6 w l title \"$netcard $titletxbyte\","      max_rxpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 3|sed -n 1p|awk '{print $4}'`         avg_rxpck=`awk 'BEGIN{total=0}{total+=$3}END{print total/NR}' $GNUPLOTFOLDER/gnu_network.$netcard`      min_rxpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 3|sed -n 1p|awk '{print $4}'`         max_txpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 4|sed -n 1p|awk '{print $5}'`         avg_txpck=`awk 'BEGIN{total=0}{total+=$4}END{print total/NR}' $GNUPLOTFOLDER/gnu_network.$netcard`      min_txpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 4|sed -n 1p|awk '{print $5}'`         max_rxbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 5|sed -n 1p|awk '{print $6}'`         avg_rxbyt=`awk 'BEGIN{total=0}{total+=$5}END{print total/NR}' $GNUPLOTFOLDER/gnu_network.$netcard`      min_rxbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 5|sed -n 1p|awk '{print $6}'`         max_txbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 6|sed -n 1p|awk '{print $7}'`         avg_txbyt=`awk 'BEGIN{total=0}{total+=$6}END{print total/NR}' $GNUPLOTFOLDER/gnu_network.$netcard`      min_txbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 6|sed -n 1p|awk '{print $7}'`         echo -e "\t\t$nu.$netcard load:"|tee -a $REPORTFILE      echo -e "\t\t\t rxpck/s:\t\t max=$max_rxpck ,\t avg=$avg_rxpck ,\t min=$min_rxpck"|tee -a $REPORTFILE      echo -e "\t\t\t txpck/s:\t\t max=$max_txpck ,\t avg=$avg_txpck ,\t min=$min_txpck"|tee -a $REPORTFILE      echo -e "\t\t\t rxbyt/s:\t max=$max_rxbyt $unit,\t avg=$avg_rxbyt $unit,\t min=$min_rxbyt $unit"|tee -a $REPORTFILE      echo -e "\t\t\t txbyt/s:\t max=$max_txbyt $unit,\t avg=$avg_txbyt $unit,\t min=$min_txbyt $unit"|tee -a $REPORTFILE      nu=`echo $nu+1|bc`           done/usr/local/bin/gnuplot --persist <<EOFset term png size 800,600set output "NetworkPackagePerformance.png"set key title "network performance"set key box 3set key belowset ylabel "Package/s"set xdata timeset timefmt "%H:%M:%S"plot $rxpackage $txpackage EOF/usr/local/bin/gnuplot --persist <<EOFset term png size 800,600set output "NetworkThougtputPerformance.png"set key title "Throughput performance"set key box 3set key belowset ylabel "$unit"set xdata timeset timefmt "%H:%M:%S"plot $rxbyte $txbyteEOF}#定义gnuplot的字体msttcore目录及字体,这个在压缩包里有,放到指定目录即可。export GDFONTPATH="/usr/share/fonts/msttcore"export GNUPLOT_DEFAULT_GDFONT="arial"SYSINFO_FILE=sysinfoCPU_USAGE_FILE=cpuusage.logMEMORY_USAGE_FILE=memusage.logDISK_USAGE_FILE=diskusage.logNETWORK_USAGE_FILE=network.logPWD=`pwd`REPORTFILE=report.txtGNUPLOTFOLDER="/tmp/gnuplotlinux"mkdir -p $GNUPLOTFOLDER#Time=`date '+%F %H:%M:%S'`echo -e "\t\t\t\t\t\tSDG Aystem Analysis Report" > $REPORTFILESysInfo $SYSINFO_FILEecho "" >> $REPORTFILECpuAllUsage $CPU_USAGE_FILECpuEachCoreUsage $CPU_USAGE_FILEecho "" >> $REPORTFILEMemoryUsage $MEMORY_USAGE_FILEecho "" >> $REPORTFILEDiskUsage $DISK_USAGE_FILEecho "" >> $REPORTFILENetworkPerformance $NETWORK_USAGE_FILEecho "" >> $REPORTFILE#脚本执行完成之后,会在性能数据所在的目录中生成#report.txt   性能报告文本#TotalCpuUsage.png  CPU利用率图表#CpuCoreIdle.png   每个CPU核心的Idle#MemoryUsage.png   内存使用率#DiskIOPSPerformance.png  磁盘IOPS性能#NetworkPackagePerformance.png  网卡发包率性能#NetworkThougtputPerformance.png 网卡吞吐性能#################################################


  • 上一条:
    Shell脚本实现监视指定进程的运行状态
    下一条:
    编写shell脚本将VPS上的数据备份到Dropbox网盘的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客