コラム: HotSpotとJRockitって何が違うの? ~ VisualVM vs MissionControl



HotSpotとJRockitって何が違うの? ~ VisualVM vs MissionControl

本コラムの対象:
HotSpotとJRockitで使えるツールの違いを知りたい方。
基礎的なトラブルシュートを自分でもできるようになりたい方。
トラブルシュートをより効率化したい方。

1.はじめに

 皆さんご存知の「Java」ですが、実はJavaの実行環境(JRE)や開発環境(JDK)は一つだけではなく、いくつかの団体・企業から提供されています。最も有名なものは元々Sun Microsystemsが提供していたHotSpot JavaVMですが、他にもIBMのJavaや、元BEAが開発していたJRockit、少し古くなりますがApache Harmonyや、JBlendなんて携帯電話向けのJavaも見聞きしたことがあるかも知れません。

さて、2010年、Oracle社がSun Microsystems社の買収を行なったことで、Oracle社は「Java」のライセンスと、JavaVMの一つである「HotSpot」を手中に収めました。また、Oracle社は2008年にBEA Systems社を買収しており、その際には別のJavaVMである「JRockit」を入手しています。「HotSpot」と「JRockit」という2つのJavaVMを手に入れたOracle社は、これらを一つに統合した「HotRockit」と呼ばれるJavaVMを開発しており、2013年頃にリリースするというスケジュールを発表しています(2012年7月現在)

その統合に先駆けて、本コラムではHotSpotとJRockitの違いを、主に「解析ツール」の観点から紹介します。HotRockitがリリースされた際には、おそらく双方の解析ツールが利用できるようになるでしょうから、このコラムで紹介した内容を活用することができるでしょう。


2.進化する解析ツール

ところで、なぜ「解析ツール」にフォーカスするのでしょうか?

このコラムがあくまでJTS (Java TroubleShooting) の一貫だから・・・なんて理由はさておき、ここ数年、解析ツールの進化には目覚ましいものがあります。数年前までは、Javaのトラブルシュートツールと言えばほとんどがコマンドラインツールであり、GUIを使った分かりやすいツールはあまり多くありませんでした。また、jstackやjmapなど、Linuxで使える解析ツールがWindows環境では使えない事も多く、トラブルシュートを進めるうえでどうしても非効率になることがありました。

しかし、ここ数年で、その状況が大きく改善されました。使いやすいGUIの解析ツールがJava標準で提供されるようになり、さらに、Windows、Mac、Linux問わず、マルチプラットフォームで利用できるようになりました。

このようなツールの進化のおかげで、トラブルシュートは決して「職人技術者」の専売特許ではなくなってきたと筆者は感じています。高度な・複雑な問題はまだしも、ある程度パターンが決まった問題であれば、ツールを駆使することで問題原因をソースコードの箇所レベルまで特定することができます。

このコラムを読んだ皆さんの現場から、一つでもトラブルがなくなるよう、あるいは、一分でも早く問題が解決するよう、解析ツールの勘所をお伝えできればと思っています。


3.HotSpotとJRockitの対応プラットフォーム

では、実際にHotSpotとJRockitの違いを見ていきましょう。まずはHotSpotとJRockitがそれぞれどのOSで利用可能なのかを、表にまとめました。

Platform OS HotSpot JRockit
32bit Linux
Solaris ×
Solaris (SPARC) ×
Windows
64bit Linux
Solaris ×
Solaris (SPARC)
Windows
OS X (Mac) ×

ご覧の通り、JRockitは一部のSolarisやMac(OS X)で利用できないなど、対応OSが限定されています。特に最近では開発環境としてMacを使うユーザーが増えていますから、JRockitがMacで使えないのは残念なところですね。


なお、Oracle社が環境ごとに推奨しているJavaVMは、以下のようになっています。
  • Solaris、Mac : Hotspot
  • Windows、Linuxのサーバ(特にOracle製品) : JRockit
  • Windows、Linuxのクライアント : HotSpot
参考)http://www.javafesta.jp/2010/pdf/A1.pdf


ここに挙げた内容はあくまでも推奨であり、JavaVMが提供されている環境であれば、ここに記載されていない使い方も可能です。


4.HotSpotにはVisualVMがあり、JRockitにはMission Controlがある

本コラムは「Javaトラブルシューティング」のコラムですから、やはりHotSpotとJRockitにどのような解析ツールが付属しているのかに注目せざるを得ません。標準で搭載さている解析ツールをいくつか紹介しておきましょう。

HotSpotとJRockitの両方に付属
jps 現在稼働中のJavaプロセスと、そのプロセスIDを一覧表示する
javap クラスファイルを解析する、簡易デコンパイラ
jhat ヒープダンプファイルを解析するためのツール
jstat Javaの統計情報、特にGCやヒープに関する情報を表示する
jconsole CPU使用率やメモリ使用量などをグラフで表示できる、簡易GUI解析ツール

HotSpotに付属
jinfo Javaプロセスの構成情報を確認、設定する
jstack Javaプロセスのスレッドダンプを取得する
jmap Javaプロセスのヒープダンプを取得する
jvisualvm GUIで利用できる統合解析ツール。詳細は後述

JRockitに付属
jrcmd 様々な処理を行えるコマンドラインツール。jstack、jmapに相当する機能もあり
jrmc GUIで利用できる統合解析ツール。詳細は後述


上に書いたような数多くのツールが提供されている中で、本コラムでは、特にGUIツールであるHotSpotの「VisualVM」と、JRockitの「Mission Control」について、その概要や使い方を解説しましょう。

百聞は一見にしかず、まずはスクリーンショットを見て頂きましょう。
VisualVMは、HotSpot(ただしJDK6 update 7以降)のインストールディレクトリのbinにある「jvisualvm」コマンドで起動できます。別途、ホームページよりダウンロードすることもできます。

VisualVM

こんなツールがHotSpotに標準で添付されているなんて、ご存知でしたか?


Missoin ControlはJRockitのインストールディレクトリのbinにある「jrmc」コマンドで起動できます。

Mission Control

現在のCPUやメモリの状態を、グラフではなくメーターで表示をするのが、Mission Controlの特徴です。


VisualVM、Mission Controlのいずれも、CPU使用率やヒープ使用量などの基本的な情報をグラフで参照できるほか、ヒープダンプやスレッドダンプなどを取得することができます。「GUIの統合解析ツール」という意味では、非常によく似た2つのツールですが、あえて特徴付けるとするならば、VisualVMは「解析」が強く、Mission Controlは「監視」に力を入れていると言えるでしょうか。


5.解析力とプラグインで上回るVisualVM

ここからは、VisualVMとMission Controlの違いを見ていきましょう。

まずはVisualVMから。VisualVMにあってMission Controlにない機能の中で、特に目玉になるものは以下の3つです。
1) ヒープダンプの解析機能
2) CPU / メモリのプロファイリング機能
3) プラグインによる拡張機能


メモリリークやOutOfMemoryErrorが発生した場合などに活用できるヒープダンプですが、解析のためには(多少使い勝手の悪い)jhatを使うか、Eclipse Memory Analyzer (MAT) を使うことが一般的でした。VisualVMでもヒープダンプの解析機能を備えており、ヒープヒストグラムの表示や、インスタンス詳細のツリー表示、OQLによる解析など、ちょうどMATと同等の機能が標準機能でできるようになりました。

ヒープダンプの解析が可能

クラスごとに、ヒープの占有量などを表示しています。


また、VisualVMにはNetBeansプロファイラ由来のCPUやメモリのプロファイリング機能を備えており、パフォーマンス調査にも利用できるツールとなっています。以前筆者も「NetBeansプロファイラのためだけにNetBeansを使っている」なんて話を聞いたことがありましたが、そのような方も今ではVisualVMだけを使えば済むようになりました。

プロファイリング機能を備えている

縮小したスクリーンショットだけ見ると、ヒープダンプの解析とあまり違いがないように見えますが、こちらはメソッドごとの実行時間などを表示しています。


VisualVMが何よりも強いのは、プラグインによる拡張機能です。MBeanの情報を参照するJMXブラウザや、GCの様子が把握できるVisualGCなどの有用なツールのほか、トレースツールである「BTrace」と連携したTracerも強力です。

豊富なプラグイン

有力なプラグインについては、また詳しく説明する機会を、別に設けましょう。

さて、ここまで見てきたVisualVMですが、少し乱暴に言ってしまうと「これまでHotSpotに付属していたコマンドラインツール + JConsole + NetBeansプロファイラ + プラグイン機能」でできた解析ツールと言えるかも知れません。そうやって統合してきたおかげで、VisualVMは、これまでもツールを使ってきた人にとっても、初めて使う人にとっても、All-In-Oneでまとまった使いやすいツールとなっています。


6.監視機能で上回るMission Control

ではもう一方の、Mission Controlを見てみましょう。

Mission Controlは何より見た目がVisualVMよりも良いのですが(笑)それを置いておいても、標準でJMXブラウザを備えていたり、発生した例外を監視する機能を持っているなど、基本機能が豊富です。プラグイン機能も備えているようですが、残念ながら2012年夏の現時点では実質的に使えないようです。

Mission Controlの中でも強力機能が「FlighRecorder」と「Memory Leak Detector」という2大ツールです。

FlightRecorderは、まさに飛行機のフライトレコーダーと同じく、JavaVMの挙動、たとえばメモリ使用量やスレッドの情報などをリアルタイムに(メモリ上に)記録し続け、問題が発生した時には、問題発生までのJavaVMの動きをファイルに書き出すことができます。

JRockit FlightRecorderはJavaVMの挙動を記録する

このおかげで、問題が発生した後になっても、問題を再現させることなく、問題発生時の状況を確認することができるのです。トラブルシュートの効率が良くなることが期待できますね。


FlightRecorderがJavaVM全般の動きを監視・記録するツールだとすれば、Memory Leak Detectorは特にメモリに特化して監視・記録するツールです。

Memory Leak Detectorはメモリを監視・記録する

Memory Leak DetectorはJavaVMのメモリを監視し、メモリリークの疑いが発生した際に警告を出したり、現在のヒープ情報を(ヒープダンプに書き出す必要なく!)表示することができます。ヒープサイズが大きいと、ヒープダンプを出力するだけでも時間がかかるため、出力せずに解析できるのはありがたいところです。

また、Memory Leak Detecotrは、ビジュアルで分かりやすくヒープ情報を表示してくれるのも、ちょっと嬉しいところです。

ヒープ情報をビジュアル化できる

上の図では、オブジェクトの関連を図(グラフ)で表示しています。


FlightRecorderとMemory Leak Detectorのおかげで、先ほども言った通り、Mission Controlは監視に強いと言えるのです。


7.さいごに

今回は、HotSpotとJRockitに付属している有益な解析ツールを紹介しました。
次回以降は各ツールを使って、実際にメモリリークなどの問題を解析する手順を解説しましょう。

では、次回をお楽しみに!

Page Top

注意:本文書の内容に誤りがあり、またこの文書によって不利益を被っても、
Acroquest Technology 株式会社は一切関知いたしません。

  • 現象別Index
  • 原因別Index

Find Bugsバグ詳細

Find Bugs Bug Descriptions日本語版

RSSで更新情報を取得する

RSSとは、ホームページの更新情報を配信する為のフォーマットです。
RSSを利用すると、登録したページの情報が更新された場合に、更新情報を自動的に受け取る事ができます。

詳細

弊社小森が執筆致しました

Javaでオブジェクト指向開発

Javaプログラミング言語習得において、新人プログラマーの最初の障害は「オブジェクト指向の壁」です。
本書は、Javaのソフトウェア開発を中心に事業を発展させてきたAcroquest社の新人教育セミナーを加筆・書籍化したもので、大卒の新人に対して、ゼロからJava言語を教えてきた実績をフィードバックしています。

メールマガジン配信中

Javaトラブルシューティングのメルマガをはじめました!是非ご購読ください

詳細