今週も先週と同様に,ソフトウエアの保守の機能を紹介します。

何らかのシステムを稼働させているときに,調子がおかしくなったことはありませんか。動作が重くなったり,Webアプリケーションだとレスポンスが遅くなったりとか。そんなときに役に立つのがJ2SE 5.0で導入されたMXBeanです(MXBeanの詳細は本連載の「JMXでソフトの健康をがっちり管理」をご覧ください)。

MXBeanが提供している情報に簡単にアクセスするためのツールがjconsoleです。

J2SE 5.0では,jconsoleでJava VMにアタッチするには,システムの起動時にオプション-Dcom.sun.management.jmxremoteを指定しておかなければなりません。これがくせ者でした。

普通はそんなオプションをつけて起動しませんよね。調子が悪くなってから,はじめて「あぁ,起動オプションをつけておくのだった」と後悔するのが関の山です。

ところが,Java SE 6では違うのです。起動オプションを指定しなくても,いつでもJava VMにアタッチできるようになりました。

ただし,アタッチできるのは「Java VMをローカルで起動させており,起動したのと同一アカウントの場合」に限られます。第三者がリモートから勝手にアタッチしてしまうのは困るので,この制限は妥当ですね。

例えば,次のプログラムを使って試してみましょう。先週使用したプログラムにウェイトを付けただけの簡単なプログラムです。

public class OutOfMemorySample2 {
    private static final String FORMULA = "Hello, World! ";
    private List messages = new ArrayList();
  
    public OutOfMemorySample2() {
        while(true) {
            appendMessage();
 
            try {
                Thread.sleep(1L);
            } catch (InterruptedException ex) {
                break;
            }
        }
    }
 
    private void appendMessage() {
        messages.add(FORMULA);
    }
  
    public static void main(String[] args) {
        new OutOfMemorySample2();
    }
}

このプログラムをまずJ2SE 5.0で実行し,次にjconsoleを実行してみます。jconsoleはJ2SE 5.0とJava SE 6のどちらのものでもかまいません。

まず,-Dcom.sun.management.jmxremoteを指定して起動してみましょう。

C:\temp>java -Dcom.sun.management.jmxremote OutOfMemorySample2

jconsoleを起動すると,アタッチ可能なJava VMのリストが表示されます(図1)。ちゃんと,OutOfMemorySample2が表示されていることがわかります(なお,図1はJ2SE 5.0のjconsoleのスクリーンショットです)。

J2SE 5.0でプログラムを実行(オプションあり)
図1 J2SE 5.0でプログラムを実行(オプションあり)

次に,J2SE 5.0で起動オプションを指定しないで,OutOfMemorySample2を起動してみます。この場合,図2に示すように,リストには表示されません。

J2SE 5.0でプログラムを実行(オプションなし)
図2 J2SE 5.0でプログラムを実行(オプションなし)

それでは,Java SE 6で起動してみましょう。もちろん,起動オプションは指定しません。起動オプションがなくても,図3に示すように,ちゃんとリストに表示されました。

Java SE 6でプログラムを実行(オプションなし)
図3 Java SE 6でプログラムを実行(オプションなし)

jconsoleはJava SE 6のものを使用していますが,jconsoleもリストに含まれています。これもオプションなしでJava VMにアタッチできるためなのです。

この機能はオンデマンドアタッチと呼ばれています。名前はともかく,見たいときにすぐに情報が見えるのは,ソフトウエアを保守するうえでとても強力な武器になるはずです。

著者紹介 櫻庭祐一

横河電機 ネットワーク開発センタ所属。Java in the Box 主筆

今月の櫻庭

秋ですねぇ。秋といえばやっぱり栗。洋栗もいいですが,和栗もおいしい。ナポリの栗を使ったSadaharu AOKIのマロニエ・オ・ショコラや,ラ・プレシューズの和栗のモンブランなど,おいしい栗のお菓子がいろいろ。

その中でも櫻庭がお勧めなのはピエール・エルメのマカロン マロン エ テベール マッチャ 。マロンのマカロンに,抹茶のクリーム。そして,クリームの中にはマロングラッセが入っています。抹茶とマロングラッセという組み合わせは絶妙です。

と,今日もまた体重を気にしつつ,プログラミングしています。