ksaitoの日記

日々試したことの覚え書き

aptパッケージのJavaでJMXを設定する

移転しました。

自動的にリダイレクトします。

UbuntuJava環境は、以前と比べて充実しています。
JDKは、SunとOpenJDKがDebianパッケージで提供されています。
アプリケーションサーバもTomcat6やJBoss、開発ツールeclipsemavenJakartaのライブラリもaptで導入できます。
導入は、簡単になりましたが設定は、戸惑うかもしれません。
いくつかの慣例を知っていると、無用なトラブルを回避できます。
JXMを設定して、設定の慣例を見ていきたいと思います。

JMXの設定

Javaの設定ファイルは、/etc/java-6-*に格納されています。
OpenJDKであれば、/etc/java-6-openjdk、Sunであれば、/etc/java-6-sunです。

$ ls /etc/java-6-openjdk/
accessibility.properties  images                psfontj2d.properties
calendars.properties      jvm.cfg               security
content-types.properties  logging.properties    sound.properties
flavormap.properties      management            swing.properties
fontconfig.bfc            net.properties
fontconfig.properties     psfont.properties.ja
$

JMXは、managementディレクトリ下のファイルで設定します。
jmxremote.accessとjmxremote.passwdでリモートからの接続のためのACLやユーザを定義できます。
デフォルトで定義されているmonitorRoleのコメントアウトをはずすだけです。
(本番運用では、パスワードの変更が必須です。)

$ hg diff
diff -r 958021231812 management/jmxremote.password
--- a/management/jmxremote.password	Wed Oct 07 23:38:39 2009 +0900
+++ b/management/jmxremote.password	Wed Oct 07 23:56:54 2009 +0900
@@ -59,6 +59,6 @@
 # Following are two commented-out entries.  The "measureRole" role has
 # password "QED".  The "controlRole" role has password "R&D".
 #
-# monitorRole  QED
+monitorRole  QED
 # controlRole   R&D
$

Tomcat6のJMX設定

/etc/defaultにパッケージのデフォルト設定ファイルがあります。
Tomcat6の場合は、/etc/default/tomcat6にJAVA_OPTSに追加のオプションを設定することでJMXを有効にできます。

$ cd /etc/default/
$ hg diff tomcat6 
diff -r 5e6aa3efb832 tomcat6
--- a/tomcat6	Wed Oct 07 23:40:01 2009 +0900
+++ b/tomcat6	Thu Oct 08 00:09:39 2009 +0900
@@ -14,6 +14,7 @@
 
 # Arguments to pass to the Java virtual machine (JVM).
 #JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
+JAVA_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
 
 # Java compiler to use for translating JavaServer Pages (JSPs). You can use all
 # compilers that are accepted by Ant's build.compiler property.
$

Tomcat6の再起動

パッケージがサービスとして動作する場合には、/etc/init.dに起動/停止のためのシェルが格納されます。
Tomcat6パッケージは、/etc/init.d/tomcat6で起動/停止します。
たいていは、オプションなしで起動すると簡単なヘルプがでます。
status, start, stop, restartといったオプションが用意されています。

$ sudo /etc/init.d/tomcat6 
 * Usage: /etc/init.d/tomcat6 {start|stop|restart|try-restart|force-reload|status}
$ sudo /etc/init.d/tomcat6 status
 * Tomcat servlet engine is running with pid 16332
$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6
   ...done.
 * Starting Tomcat servlet engine tomcat6
   ...done.
$ 

jconsoleでの確認

jconsoleを起動して設定に合わせた接続情報を入力すると、こんな画面が表示されるはずです。