実メモリとスワップメモリの閾値監視

■細かいことはいいから、freeコマンドとbashだけでなんとかしたいという人向け。
 ※性能監視ツールを入れる前のシナリオとして、以下のような場合に。

 「空きメモリがキャッシュとして予約されている分もあるのは分かるけど、
  スワップを使ってるのはメモリ不足かも。
  とりあえず、どんぶり勘定で取得したい。。。」

■というわけで、デフォルト値は、「実メモリの使用率が 70% を超えた」 or 「スワップが 0% を超えた」の場合に、結果を出力します。
 何も出力しないとちゃんと動いているか心配なので、「-t,test」を用意。
 「実メモリの使用率が 0% を超えた」 and 「スワップが -1% を超えた」を出力。
 後、簡易ながら、オプションで指定できるようにしたので、試してみて下さい。

$ w3m https://raw.github.com/labunix/sa_report/master/swapcheck.sh
#!/bin/bash
if [ "$#" -ne 0 ];then
  for list in "$@";do
  case $list in
-t|test)
    # Test Used / Total * 100 % threshold
    SWAPLIMIT=-1
    MEMLIMIT=0
    break
    ;;
-s:*|SWAPLIMIT=*)
    SWAPLIMIT=`echo $1 | sed s/"="/":"/ | awk -F\: '{print $2%100}'`
    shift;
    ;;
-m:*|MEMLIMIT=*)
    MEMLIMIT=`echo $1  | sed s/"="/":"/ | awk -F\: '{print $2%100}'`
    shift;
    ;;
-h|--help|*)
    echo "# at 1st Test"
    echo "Usage $0 [OPTION]"
    echo ""
    echo "-h,--help			This Help"
    echo "-t,test			Test Mode"
    echo "				SWAPLIMIT=-1,MEMLIMIT=0"
    echo "-s:[num],SWAPLIMIT=[num]	num is -1 to 99"
    echo "-m:[num],MEMLIMIT=[num]	num is -1 to 99"
    echo ""
    echo "DEFAULT			SWAPLIMIT=0,MEMLIMIT=70"
    exit 1;
    ;;
    esac
  done
fi

if [ "x$MEMLIMIT" == "x" ];then
  MEMLIMIT=70
fi
if [ "x$SWAPLIMIT" == "x" ];then
  SWAPLIMIT=0
fi
MYDATE=`env LANG=C date '+%Y/%m/%d,%H:%M:%S'`
# Swap Over 0%,Memory Over 70%
free | grep ^Swap | \
  awk '{if (($3/$2*100)>'"${SWAPLIMIT}"') print "'"$MYDATE"',Swap Used:" ($3/$2*100)"%"}'
free | grep ^Mem  | \
  awk '{if (($3/$2*100)>'"${MEMLIMIT}"') print "'"$MYDATE"',Mem Used :"($3/$2*100)"%"}'

unset SWAPLIMIT MEMLIMIT list
exit 0