goo blog サービス終了のお知らせ 

Psalm

プログラマ向け技術メモ

メモリ監視したいんですけど。

2012-04-05 11:21:53 | お知らせ
Muninインストール、起動まで成功。
さて、いざメモリ監視と思ったらPC全体のメモリしか表示されないので
目的のWebアプリケーションがどれだけメモリを使ってるのかなんて
さっぱりだ。
このままではいかん、ということで指定したTomcatのメモリを監視してくれる
プラグインを入れることにした。
jstat__heap pluginってやつだ。
まずはプラグインをダウンロード。
http://exchange.munin-monitoring.org/plugins/jstat__heap/details

/usr/share/munin/plugins/ に入れて、/etc/munin/plugins/に
シンボリックリンクを貼る。

# ln -s /usr/share/munin/plugins/jstat__heap plugin /etc/munin/plugins/jstat__heap plugin

んで、プラグインの設定をする。
まずこのプラグインを使うにはTomcatをjsvcで起動する必要があるので
jsvcをインストールする。

Tomcatのbin/の下に、commons-daemon-native.tar.gzがあるので解凍する。

# tar -xzf commons-daemon-native.tar.gz
# cd 1.0.2-native-src/unix

autoconfを利用してconfigureスクリプトを作成。

# autoconf

configureを実行。/xxx/jdk は任意のJAVA_HOMEディレクトリ。

# ./configure --with-java=/xxx/jdk

make実行。

# make clean
# make

makeの前にmake cleanしないと、

ar : libservice.a : Malformed archive

とか言って怒られる。バグだ。
さらに、configureに --with-java=/xxx/jdk とか入れないと

error:jni.h そのようなファイルやディレクトリはありません

とか言って怒られる。
これだけやってもまだ怒られた。

Cannot dynamically link to /xxx/xxx/xxx/libjvm.so
Cannot restore segment prot after reloc: Permission denied.

SELinuxがセキュリティーの問題でライブラリをロードできないように
しているからだそうだ。
しらねーよー・・・
解除してやる。

# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /xxx/xxx/xxx/libjvm.so

コンパイルが通ったら、jsvcというファイルができているので
所有者をtomcatユーザにしてTomcat/bin に移動する。

# chown tomcat:tomcat jsvc
# mv -f jsvc /opt/tomcat6/bin


次はjsvcの起動スクリプトを作成する。

# vi /etc/rc.d/init.d/jsvc

スクリプトの中身。

#!/bin/sh
#
# chkconfig: - 80 20
# description: jsvc

# Source function library.
. /etc/init.d/functions

JAVA_HOME=/usr/java/jdk1.6.0_11
CATALINA_HOME=/opt/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc

start(){
    #
    # Start Tomcat
    #
    
    echo -n "Starting jsvc: "
    $DAEMON \
    -pidfile $PIDFILE \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        touch $LOCKFILE
    else
        echo_failure
            fi
        echo
    }

stop(){
    #
    # Stop Tomcat
    #
    echo -n "Shutting down jsvc: "
    $DAEMON \
    -stop \
    -pidfile $PIDFILE \
    org.apache.catalina.startup.Bootstrap
    RETVAL=$?
    if [ $RETVAL = 0 ]; then
        echo_success
        rm -f $PIDFILE $LOCKFILE
    else
        echo_failure
    fi
    echo
}

case "" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status $DAEMON
        RETVAL=$?
        ;;
    *)
        echo $"Usage: jsvc {start|stop|restart|status}"
        exit 1
        ;;
    esac 




スクリプトの作成が終わったら、ファイルに実行権限を付与。

# chmod 755 /etc/init.d/jsvc

起動してみる。

# /etc/init.d/jsvc start

これでjsvcの設定は完了。
jstat__heap pluginの設定に戻る。

# vi Tomcat/conf/server.xml

して、監視したいWebアプリのHostName の設定を探して
<Alias>の設定をする。


<Host name="localhost" >
<Context path="xxxx" ... />
<Alias>localhost</Alias>
</Host>


設定したエイリアスの名前を、プラグインのファイル名に入れる。

# mv /etc/munin/plugins/jstat__heap /etc/munin/plugins/jstat_localhost_heap

プラグインの実行権限をrootに設定する。

# vi /etc/munin/plugin-conf.d/munin-node

以下を追加。

[jstat*]
user root

プラグインの実行権限を設定していないとmuninのログに

cat: /var/run/jsvc.pid : Permission denied.

が出力される。
ちなみに、/etc/munin/plugins.conf はダミーなのでキニシナイ。
・・・なんで設定ファイルが二つもあるんだ?
紛らわしい。

試しに実行してみる。

# /etc/munin/plugins/jstat_localhost_heap

メモリの値が取れれば成功。
Muninに設定を読み込ませる。

# /etc/init.d/munin-node restart

Muninのプラグインのインストール状況を確認する。

# munin-node-configure -suggest

jstatがyesになっていることを確認。
これで、よーーーーーーやく、メモリ監視ができる!
と喜んだのも束の間。
グラフの単位が[by a day]しかないっ!
もっと細かい監視がしたいんだよ!!!
分単位のさあ!

続く。