Pocket

jconsole(JMX) で Tomcat 7.0.39 のJavaVM 監視を簡易的に行う方法

  • add this entry to hatena bookmark

Javaアプリの管理や監視を行う為のインターフェースであるJMX(Java Management Extensions)を使って、Javaに付属している「jconsole」から、TomcatのJava VM を監視するための設定を行いました。作業手順を記録しておきます。

1.Tomcat側でJMX設定

まずは、TomcatのJavaVM側で、リモートノードからJMXを使えるように設定を行います。

利用するTomcatは 7.0.39 です。

「$CATALINA_BASE」を「/usr/local/tomcat」だとすると、/usr/local/tomcat/bin/catalina.sh を使ってTomcatのオペレーション(起動や停止等)を行っています。その為、まずは、catalina.sh を見て、JMX設定を入れるべき箇所を探しました。すると、以下のコメントが見つけられます。

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.
#

#   JAVA_OPTS       (Optional) Java runtime options used when any command
#                   is executed.
#                   Include here and not in CATALINA_OPTS all options, that
#                   should be used by Tomcat and also by the stop process,
#                   the version command etc.
#                   Most options should go into CATALINA_OPTS.

これによると、JMX設定は「JAVA_OPTS」ではなく「CATALINA_OPTS」で設定すれば良さそうです。

「CATALINA_OPTS」を設定する箇所を探してみると、別途新規に「setenv.sh」を作成し、その中で定義すれば良さそうです。

よって、catalina.sh と同じ場所ですが、「/usr/local/tomcat/bin/」に setenv.sh を作成します。そうすると、catalina.sh から setenv.sh が読み込まれる形になります。

設定内容 は以下になります。この設定で、リモートノードからJMXを使って(認証は行わずに)Tomcat の Java VM を監視できるようになります。

# cat setenv.sh
#!/bin/sh

export CATALINA_OPTS="-Dcom.sun.management.jmxremote=true
                      -Dcom.sun.management.jmxremote.port=10080
                      -Dcom.sun.management.jmxremote.ssl=false
                      -Dcom.sun.management.jmxremote.authenticate=false"
#

portは「10080」としていますが、環境に合致したポート番号を使っても問題ありません。
以下のように実行権限を与えておきます。

# chmod 755 setenv.sh

これで、Tomcat側でのJMX設定は完了となりますので、Tomcatを再起動します。

# ps -awef|grep java|grep -v grep
root     19780     1  0 May06 ?        00:00:09 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
#
# /usr/local/tomcat/bin/catalina.sh stop
# ps -awef|grep java | grep -v grep
# /usr/local/tomcat/bin/catalina.sh start
# ps -awef|grep java|grep -v grep
root     25059     1 11 11:29 pts/0    00:00:03 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=10080 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
#

再起動後に、psコマンドによるプロセス確認でも、jmxremote の設定が反映されている事が確認できました。(上記の青色部分)

2.FireWallで、JMX接続ポートへの導通を許可

リモートノードからJMXを使って接続できるようにする為に、先ほど setenv.sh で指定したJMXポートに対する接続をFireWallで開放します。

私の環境では、iptables を使っているので、iptables での設定を以下に記載しておきます。

# iptables --list --line-number (←番号確認)
# iptables --insert INPUT (番号) -p tcp -s (ソースIP) --dport 10080:65535 -j ACCEPT
# iptables --list --line-number (←追加確認)
# /sbin/service iptables save (←ファイルへ保存)
# cat /etc/sysconfig/iptables (←保存ファイルを確認)

なお、setenv.sh の jmxremote.port では「10080」を指定していますが、iptables での「dport」設定では「10080 から65535まで」というレンジで許可設定を入れています。「10080」だけの場合は、以下のように jconsole で接続エラーが発生する為です。

jconsole-connect-fail

3.jconsole での接続

ここまでの手順で、Tomcat Java VM へのリモートからのJMX接続設定が完了し、経路にあるFireWallでの通信許可設定も完了しています。

よって、次は jconsole を起動し、接続確認を行います。

jconsole を起動する私の端末は、Windows7で「JDK 1.7.0_17」 が入っています。jconsole は JDK に含まれており、配置されている場所は「C:\Program Files\Java\jdk1.7.0_17\bin\jconsole.exe」です。コマンドプロンプトで jconsole を起動します。

C:\Program Files\Java\jdk1.7.0_17\bin>jconsole

すると、「Java Monitoring & Management Console」が起動します。起動後、しばらくした画面となりますが、以下がサンプル画面です。

jconsole

jconsole では、以下のようなタブで画面を切り替えられますので、必要に応じて各画面を参照できます。

jconsole-tab

以上のように、jconsole を使って、JMXでの接続確認や、Tomcatの監視、その他のJava VM監視を簡易的に行う事ができます。監視ツールでの設定を行う際にもMBeansの値確認などで重宝すると思います。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。