Skip to content

Instantly share code, notes, and snippets.

@nagaetty
Created April 22, 2012 11:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nagaetty/16b1dee4088af2778b1f to your computer and use it in GitHub Desktop.
Save nagaetty/16b1dee4088af2778b1f to your computer and use it in GitHub Desktop.
shells
#!/bin/bash
#
# ログフォルダ作成
if [ ! -d /home/tmp ]
then mkdir /home/tmp
fi
cd /home/tmp/
# 1日分のログ保存ファイル作成
day=`date +'%Y%m%d'`
if [ ! -f /home/tmp/$day.csv ]
then
touch /home/tmp/$day.csv
Itime=`date +'%Y/%m/%d:%H:%M:%S'`
echo "Time,User,PID,Size,Rss,Shard_Clean,Shard_Derty,Private_Clean,Private_Derty,Swap,START,CMD" >> /home/tmp/$day.csv
fi
# smaps解析awkの準備
if [ ! -f /home/tmp/smaps.awk ]
then
cat <<_EOF_ > /home/tmp/smaps.awk
#% cat /proc/12225/smaps
# Size : 確保している仮想メモリ
# Rss : 割り当てられた物理メモリ
# Shared_Clean: 確保した共有メモリ
# Shared_Dirty: 割り当てられた共有メモリ
# Private_Clean: 個別で確保したメモリ
# Private_Dirty: 個別で利用していメモリ
# Swap: Swapに割り当てられたサイズ
BEGIN {
ahead="";
ISize = 0;
IRss = 0;
IShared_Clean = 0;
IShared_Dirty = 0;
IPrivate_Clean = 0;
IPrivate_Dirty = 0;
ISwap = 0;
}
{
if( NF == 3 ) {
if( \$0 ~ /^Size:/ ) { ISize = ISize + \$2 ; }
if( \$0 ~ /^Rss:/ ) { IRss = IRss + \$2 ; }
if( \$0 ~ /^Shared_Clean:/ ) { IShared_Clean = IShared_Clean + \$2 ; }
if( \$0 ~ /^Shared_Dirty:/ ) { IShared_Dirty = IShared_Dirty + \$2 ; }
if( \$0 ~ /^Private_Clean:/ ) { IPrivate_Clean = IPrivate_Clean + \$2 ; }
if( \$0 ~ /^Private_Dirty:/ ) { IPrivate_Dirty = IPrivate_Dirty + \$2 ; }
if( \$0 ~ /^Swap:/ ) { ISwap = ISwap + \$2 ; }
}
}
END {
printf("%s,%s,%s,%s,%s,%s,%s,",
ISize, IRss, IShared_Clean, IShared_Dirty, IPrivate_Clean , IPrivate_Dirty,
ISwap);
}
_EOF_
fi
# pid 情報を取得
ps auxww | while read LINE;
do
IUSER=`echo $LINE | awk '{ printf("%s",$1); }'` ;
IPID=`echo $LINE | awk '{ printf("%s",$2); }'` ;
IDAT=`echo $LINE | awk '{ printf("%s",$9); }'` ;
ICMD=`echo $LINE | awk '{ printf("%s",$11); }'` ;
# プロセス単位のメモリ使用量を調べる
if [ -e /proc/$IPID/smaps ] ; then
echo -n $Itime","$IUSER","$IPID"," >> /home/tmp/$day.csv
awk -f /home/tmp/smaps.awk /proc/$IPID/smaps >> /home/tmp/$day.csv
echo $IDAT",""\""$ICMD"\"" >> /home/tmp/$day.csv
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment