toge's diary

コンピュータ関連の趣味をつらつらと。

VisualVMを使い始めたら最初にやるべきこと

VisualVM 1.3.3の新機能でも使ってみよう・・・と思いながら、風邪ひきかけたり、帰宅が遅かったりで、時間が取れません。
嘆いてもいられないので、過去に蓄積したネタを潰していくことにします。

Javaトラブルシュータの必修ツールといっても過言でないVisualVMですが、快適に使うためには少々工夫が必要です。
それはVisualVM/etc/visualvm.confに記述されているdefault_optionsとjdk_homeです。
JDK標準添付VisualVMの場合 JDK/lib/visualvm/tec/visualvm.confになります。

最新版のVisualVM1.3.3では次のようになってます。

default_options="-J-client -J-Xms24m -J-Xmx256m -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"
# for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea

# default location of JDK/JRE, can be overridden by using --jdkhome

switch
#jdkhome="/path/to/jdk"

何てこったい、今時ClientVMに256Mbyteのヒープです。VisualVMはカジュアルなツールとでも思っているんでしょうか?・・・まあ、そんな愚痴はさておき、サクッと直してしまいましょう。
ついでにお気に入りのJDKへのパスをjdkhomeに書いておくと精神的に安定できます。

default_options="-J-server -J-Xms102m -J-Xmx1024m -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"
# for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea

# default location of JDK/JRE, can be overridden by using --jdkhome

switch
jdkhome="/usr/java/jdk1.7.0"

特に数GBの巨大なヒープダンプを解析したり、ちょっと複雑なOQLを実行したりする場合、明らかに読み込み速度も実行速度も変わります。
ぜひお試しを。
個人的な経験では、ヒープサイズは1GB以上設定してもあまり速度が変わらないように感じます。
むやみに設定しない方が良いと思います。