Java VisualVMを使ってみた話 | Pimp my Code. @wataru420

Pimp my Code. @wataru420

My name is Wataru Fukunaga.

VisualVMとはJConsole、jstat、jinfo、jstack、jmapなんかを全部まとめたすごいやつ。
JDK6から入ってるの。まじ便利なので紹介しときます。

なにができるの?


jstatdとかJMXを利用して、リモート環境のJVMの情報を取得することができます。
もちろんローカルでもいいんだけど。
JVMの構成情報、ヒープダンプの取得、スレッドダンプの取得、パフォーマンスとリソース消費に関する情報なんかがちょっと素敵なGUIで確認できるツールです。

どうやって使うの?


visualVMのサイトから最新版をダウンロードします。
んでbinのなかにあるshellかexeファイルをキックすれば起動します。

あんまりなんでも監視できてもあれなので、今回はJMXを使った方法で行きます。

監視対象のアプリの起動オプションに下記のオプションを加えてあげます。
Tomcatの場合はsetenv.shのCATALINA_OPTSに書くといいと思います。
JAVA_OPTSに書くとTomcatが終了しなくなるので注意!!


-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

これでアプリを起動します。

あとはvisualVMのメニューから File -> Add Remote Host とかってやってポートとかIPとか指定すれば、
こんな素敵な画面が出てきます。

starvation   (explored #256)

ヒープの解析とかもさくっと


starvation   (explored #256)

ボタン一発でHeapDumpとかも取れちゃいます。
便利ですねー

パスワードをかける


Tomcatとか、グローバルに公開してるアプリの場合、誰でもみれちゃうのはまずいかも?ですよね。
その場合はパスワードをかけましょう。

パスワードを書ける場合はこんな感じのオプションにします。

-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat/conf/jmxremote.access


んでjmxremote.accessとjmxremote.passwordをつくります。


monitorRole readonly
controlRole readwrite


monitorRole tomcat
controlRole tomcat


jmxremote.passwordはアクセス権限を600にします。
これやらないとTomcatが起動しなくなります。

これで実際にアクセスしてみましょう。

ユーザーはmonitorRole、パスワードはtomcatです。

これで安心ですね。
なんか様子がおかしいなと思ったら接続してみるみたいな使い方ができて便利だなー。

Java仮想マシン仕様 (The Java series)Java仮想マシン仕様 (The Java series)
ティム リンドホルム フランク イェリン Tim Lindholm

ピアソンエデュケーション 2001-05
売り上げランキング : 203143

Amazonで詳しく見る