[Server] サーバー管理ツールを作る #3「メモリ使用値の取得」

2015年5月12日

サーバー プログラミング 特集

今回は、サーバーのメモりの使用割合の値を取得します。 DBサーバーなどでは、随時RAMにデータがキャッシュされるため、値が高くなる傾向がありますが、 フロント側のapacheのみでのサーバーの場合はこの値が高くなる事はあまりないので、そういう検知を行うことが出来ます。

やりたい事

freeコマンドを実行して、対象の値を計算して割合を取得します。

ソースコード

health-mem.sh

#!/bin/bash DIR=`dirname $0` dataFile=$DIR"/servers.list" while read line do if [ -n "${line}" ] then echo ${line}"\t: `ssh -no 'ConnectTimeout 3' ${line} free -m | awk '{if($1==\"Mem:\"){total = $2}else if($1==\"-/+\"){data = $3}}END{print int(data/total*1000)/10}'`" fi done < $dataFile

解説

1,freeコマンドを-mオプションを付けることで、MB単位での表示を行う 2、"Mem:"の行に対して2カラム目に当たる「total」の値を取得。この値が全体メモリの値になる 3、"-/+"の行が「buffers/cache」になるので、使用メモりの値として取得 4、使用メモり ÷ 全体メモり = メモり使用割合 5、1000を掛けて小数点を切り捨てて10で割ることで小数点1位までのデータとする。

使い方

1、「servers.list」ファイルに対象サーバーを改行区切りでいくつでも保存する。 2、以下のコマンドを叩くだけ(任意位置から叩いてもOK) $ sh health-mem.sh 192.168.33.1 : 9.3 192.168.33.2 : 35 192.168.33.3 : 45.8 192.168.33.4 : 15.4 192.168.33.5 : 41.4 192.168.33.6 : 12.6 ※上記の値は全て「%」です。

2つのソースを比較

サーバー用途によって使用割合が違いますが、あくまでこの値は取得時のモノで、1日の平均値を取得してみてサーバーの性能判定を行うとより正確に判定できると思います。 ちなみに、今回もtimeコマンドでベンチしてみました。
time計測 : 0m2.343s