負荷計測用の簡易スクリプト †※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; } } }' |