2012年6月2日土曜日

lsofを監視するツール

#!/bin/sh
if [ $# -ne 1 ]; then
  echo "Please input hostname"
  exit 1;
fi

echo "lsof agent start !"
JPS=`jps | grep Bootstrap | awk '{print $1}'`
PID_FILE="lsof_agent_$1.pid"
if [ $JPS ]; then
  touch $PID_FILE
  while :
  do
    if [ -f $PID_FILE ]; then
      LOG_FILE=`date "+%Y%m%d"`_lsof_agent_$1.log
      LSOF=`lsof | grep $JPS | wc -l`;
      LSOF_ALL=`lsof | wc -l`;
      echo `date "+%Y%m%d %H%M%S"` $LSOF $LSOF_ALL >> $LOG_FILE;
      sleep 2;
    else
      exit 1;
    fi
  done
else
  echo "not found JPS...";
fi

※シェルスクリプトの名前は「lsof_agent.sh」としてます

■概要
開いているすべてのファイル数とJVM上で動作しているtomcatが開いているファイル数を監視し続けます
「日付_lsof_agent_hostname.log」というファイルにlsofの結果を出力し続けます
ログファイルは日付をまたぐと自動でローテートしてくれます
実行すると「lsof_agent_hostname.pid」というファイルができるのて停止する場合にはこのファイルを削除します

■使い方
./lsof_agent.sh hostname &

lsofの結果をgrepしているだけではあるので必要に応じてgrepする項目を変更していただければと思います
ちなみにlsofは基本的にroot権限がないと実行できないので、rootで実行してください

1 件のコメント: