JMX を使ってみた
JMX (Java Management Extensions) は、Java アプリケーション、VM などを監視するための標準 API です。J2SE 5.0 から標準で搭載されています。
JMX という API があるのは知っていましたが、訳あって今回はじめて使ってみました。
これ、便利です!! メモリの使用状況やスレッドの状態をグラフィカルに見ることができます。どうしてもっと早く使わなかったんだろう? まぁ J2SE 5.0 を仕事で使ったのは、前のプロジェクトが初めてですけどね。
まだ 1.4.x を使っている人・組織は、EoD (Ease of Development) とあわせて、5.0 へ早く乗り換えた方がお得だと思います。
# もう次の 6.0 のリリースも目前ですが。
JMX エージェントの有効化
まず、監視されるアプリケーション内の JMX エージェントを有効にします。
Sun JRE、WebLogic JRockit、Tomcat、WebLogic Server の3通りで試してみました。
Sun JRE の場合
使用する JRE のフォルダ (JDK をインストールしたフォルダの jre) の lib\management\management.properties の以下の箇所を修正します。
# JMX で使用するポート番号 (適宜変更) com.sun.management.jmxremote.port=8999 # SSL を有効にするか? com.sun.management.jmxremote.ssl=false # 認証を有効にするか? com.sun.management.jmxremote.authenticate=false
※簡単のために、SSL も認証も無効にしてしまいましたが、本番稼動時は適切な設定を行ってください。
以上の設定を行ったら、オプション -Dcom.sun.management.jmxremote
を指定して、JRE を起動します。
java -Dcom.sun.management.jmxremote foo.bar.Baz
これで、準備完了です。
WebLogic JRockit の場合
JRockit は WebLogic に付属する BEA の JRE です。
オプション -Xmanagement
を指定して、JRE を起動します。
java -Xmanagement foo.bar.Baz
監視用のポートはデフォルトで 7091 を使用します。
変更したい場合は、起動オプションで、-Djrockit.managementserver.port=ポート番号
の指定をします。
Tomcat の場合
基本的に使用している JRE の設定に準じます。
ZIP ファイルからインストールしたときは bin\catalina.bat の適切な位置に以下の行を追加します。
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dcom.sun.management.jmxremote
Windows インストーラを使ったときは、Service Manager のプロパティの Java Options に -Dcom.sun.management.jmxremote を追加します。
WebLogic Server の場合
以下、WebLogic がインストールされたフォルダ (C:\BEA\weblogic92 など) を WL_HOME で表します。
1つ目の方法は、起動バッチを修正する方法。
監視用のポートはデフォルトで 7091 を使用します。
%WL_HOME%\samples\domains\wl_server\bin\startWebLogic.cmd の適切な位置に以下の行を追加します。
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xmanagement
2つ目の方法は、管理コンソールから指定する方法。手順は以下の通り。
監視用のポートはデフォルトで 7001 を使用します。
- 環境の [サーバ] を選択し、「サーバの概要」画面を開きます。
- 監視対象のサーバ(exampleServer など) を選択し、「サーバの設定」画面を開きます。
- [プロトコル]、[IIOP] の順にタブを選択します。
- チェンジセンタの [ロックして編集] をクリックします。
- 「IIOP を有効化」チェックボックスにチェックを入れ、詳細の「デフォルト IIOP ユーザ名」「デフォルト IIOP パスワード」に適当なユーザ名、パスワードを入力します。
このとき、「ステートフルな認証を使用」のチェックをはずしておかないと上手くいかないことがあるようです。
※本来はずすべきでないと思いますが、その場合の対処方法は未調査。 - 設定を保存し、WebLogic Server を再起動します。
監視ツール
アプリケーション側の設定ができたら、監視ツールで状況を監視してみましょう。
jconsole
JDK に標準で添付されている監視ツールです。メモリ使用量、スレッドの状況、ロードされたクラス数などが監視できます。
jconsole プロセスID
または、
jconsole ホスト名:ポート番号
で起動します。
単に jconsole で起動して、後から監視対象を指定することも可能です。
IIOP 経由で WebLogic Server を監視する場合は、起動後のダイアログで「詳細」タブを選択し、JMX URL を service:jmx:rmi:///jndi/iiop://localhost:7001/weblogic.management.mbeanservers.runtime
のように指定します。
MC4J Management Console
Apache Lisense 2.0 で公開されているフリーの監視ツールです。
http://sourceforge.net/projects/mc4j/
からダウンロードできます。
メモリ使用量、スレッドの状況などが監視できます。
ダウンロードしたファイルをインストールすると、スタートメニューに登録されます。
監視対象は、起動後の画面で J2SE、Tomcat、WebLogic などから選んで、Wizard 形式で追加します。
Sun の JRE に接続した場合、メモリ使用量は、Code Cache、Perm Gen、Eden Space、Survivor Space、Tenured Gen と内訳(?)まで見ることができます。
参考 URL
- JMX を使用する監視と管理
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/management/agent.html - 「MC4J」でTomcatのクラスタにアクセスする
http://www.javaworld.jp/technology_and_programming/-/36981.html - JRockit Management Console ユーザーズガイド
http://www.beasys.co.jp/e-docs/jrockit/docs50/usingJMC/index.html - JRockit Mission Control 入門
http://www.beasys.co.jp/dev2dev/pub/a/2006/02/jrockit-mission-control.html - Administration Console オンライン ヘルプ - IIOP の有効化とコンフィグレーション
http://www.beasys.co.jp/e-docs/wls/docs92/ConsoleHelp/taskhelp/channels/EnableAndConfigureIIOP.html