** 負荷計測用の簡易スクリプト [#r653b761]

※IO待ちなどはTOPからは取得できないので、「vmstat -t -n 1」等と併せて比較する。

・TOPコマンド結果の1行表示(リアルタイム表示)
 #!/bin/sh
 
 ###################################################
 # 処理概要 : TOPコマンドの結果を各瞬間毎に1行表示する
 # 詳細 : 各行に表示される内容は以下の通り
 #    ロードアベレージ
 #    CPU使用率の一番高いプロセス名、及び使用率
 #    メモリ使用率の一番高いプロセス名、及び使用率
 #    メモリ使用状況(total,used,free,buffers)
 #    スワップ状況(total,used,free,cached)
 ###################################################
 
 # TOPログの保存場所 
 toplog="/tmp/mytop_`date +%y%m%d%H%M%S`.log"
 
 # TOPコマンド結果の取得
 top -d 1 -b > $toplog &
 
 echo ""
 echo "***** Infomation : all top log => $toplog *****"
 echo ""
 
 # 1秒delay
 sleep 1
 
 echo "Press Start to display any key!!"
 read dummy
 
 # TOPコマンド結果の1行表示
 tail -f $toplog | grep -P "^(top[ ]+|Mem:|Swap:|[ ]+([0-9]|PID))" | awk '
 BEGIN {
   dt=""
   la="";
   max_cpu=0;pname_cpu="";
   max_mem=0;pname_mem="";
   print "date,load average,cpu high process,,memory high process,,Mem Info,,,,Swap Info";
   print "date,,process,used,process,used,total,used,free,buffers,total,used,free,cache";
 }
 {
   match_lavg = match($0,"load average:");
   match_mem  = match($0,"Mem:");
   match_swap = match($0,"Swap:");
   if (match_lavg>0) {
     la=$0;
     gsub(".+load average: ","",la);
     la=substr(la,1,4);
     dt=$0;
     gsub("^top - ","",dt);
     dt=substr(dt,1,8);
   } else if (match_mem>0) {
     meminfo=$0;
     gsub(".*Mem:[ ]+","",meminfo);
     gsub(" ","",meminfo);
     gsub(",","\t",meminfo);
     gsub("total",",",meminfo);
     gsub("used",",",meminfo);
     gsub("free",",",meminfo);
     gsub("buffers","",meminfo);
     gsub("\t","",meminfo);
     gsub(" ","",meminfo);
   } else if (match_swap>0) {
     swapinfo=$0;
     gsub(".*Swap:[ ]+","",swapinfo);
     gsub(" ","",swapinfo);
     gsub(",","\t",swapinfo);
     gsub("total",",",swapinfo);
     gsub("used",",",swapinfo);
     gsub("free",",",swapinfo);
     gsub("cached","",swapinfo);
     gsub("\t","",swapinfo);
     gsub(" ","",swapinfo);
   } else if ($1=="PID") {
     if (pname_cpu!="") {
       print dt","la","pname_cpu","max_cpu","pname_mem","max_mem","meminfo","swapinfo;
       max_cpu=0;
       max_mem=0;
     }
   } else {
     if ($9>max_cpu) {
       max_cpu=$9;
       pname_cpu=$12;
     }
     if ($10>max_mem) {
       max_mem=$10;
       pname_mem=$12;
     }
   }
 }'

・計測結果をCSVとして出力
 #!/bin/sh
 
 #######################
 toplog=$1
 reslog=`echo $toplog | sed s/log$/csv/`
 #######################
 
 
 if test -r $toplog;then
   echo ""
   echo "Analyze top log($toplog) , output csv($reslog)"
   echo ""
 else
   echo "$toplog is not found!"
   exit 1
 fi
 
 # CSV出力
 cat $toplog | grep -P "^(top[ ]+|Mem:|Swap:|[ ]+([0-9]|PID))" | awk '
 BEGIN {
   dt=""
   la="";
   max_cpu=0;pname_cpu="";
   max_mem=0;pname_mem="";
   print "date,load average,cpu high process,,memory high process,,Mem Info,,,,Swap Info";
   print "date,,process,used,process,used,total,used,free,buffers,total,used,free,cache";
 }
 {
   match_lavg = match($0,"load average:");
   match_mem  = match($0,"Mem:");
   match_swap = match($0,"Swap:");
   if (match_lavg>0) {
     la=$0;
     gsub(".+load average: ","",la);
     la=substr(la,1,4);
     dt=$0;
     gsub("^top - ","",dt);
     dt=substr(dt,1,8);
   } else if (match_mem>0) {
     meminfo=$0;
     gsub(".*Mem:[ ]+","",meminfo);
     gsub(" ","",meminfo);
     gsub(",","\t",meminfo);
     gsub("total",",",meminfo);
     gsub("used",",",meminfo);
     gsub("free",",",meminfo);
     gsub("buffers","",meminfo);
     gsub("\t","",meminfo);
     gsub(" ","",meminfo);
   } else if (match_swap>0) {
     swapinfo=$0;
     gsub(".*Swap:[ ]+","",swapinfo);
     gsub(" ","",swapinfo);
     gsub(",","\t",swapinfo);
     gsub("total",",",swapinfo);
     gsub("used",",",swapinfo);
     gsub("free",",",swapinfo);
     gsub("cached","",swapinfo);
     gsub("\t","",swapinfo);
     gsub(" ","",swapinfo);
   } else if ($1=="PID") {
     if (pname_cpu!="") {
       print dt","la","pname_cpu","max_cpu","pname_mem","max_mem","meminfo","swapinfo;
       max_cpu=0;
       max_mem=0;
     }
   } else {
     if ($9>max_cpu) {
       max_cpu=$9;
       pname_cpu=$12;
     }
     if ($10>max_mem) {
       max_mem=$10;
       pname_mem=$12;
     }
   }
 }'


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS