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)](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fvisualvm.java.net%2Fimages%2Fmonitor.jpg)
ヒープの解析とかもさくっと
![starvation (explored #256)](https://img-proxy.blog-video.jp/images?url=http%3A%2F%2Fvisualvm.java.net%2Fimages%2Fprofiler.jpg)
ボタン一発で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 readonlycontrolRole readwrite
monitorRole tomcatcontrolRole tomcat
jmxremote.passwordはアクセス権限を600にします。
これやらないとTomcatが起動しなくなります。
これで実際にアクセスしてみましょう。
ユーザーはmonitorRole、パスワードはtomcatです。
これで安心ですね。
なんか様子がおかしいなと思ったら接続してみるみたいな使い方ができて便利だなー。
![]() | Java仮想マシン仕様 (The Java series) ティム リンドホルム フランク イェリン Tim Lindholm ピアソンエデュケーション 2001-05 売り上げランキング : 203143 Amazonで詳しく見る |