JINSPIRED は今月,軽量な Java アプリケーションパフォーマンスモニタ OpenCore のバージョン 6.0 をリリースした。
OpenCore は,低レイテンシなアプリケーションを主な対象とするパフォーマンスモニタ用ライブラリである。これはつまり,可能な限りオーバーヘッドを小さくすることを目標としている,という意味だ。また,このライブラリでは "プローブ (probes)" ,"評価 (measures)","測定 (meters)" の分離を重視した統合モデルを規定している。「プローブ」は,プログラムの実行中における任意の開始点と終了点 (つまり,あるメソッドの開始と終了) であり,「測定」は CPU使用率や時刻などの値の特定時刻におけるサンプルを,「評価」は,一連のプローブにわたる測定値をサンプリングした結果に対するある種のサマリを表している。例えば次のような言い方ができる。"すべてのメソッドの入り口と出口を プローブ してくれ。プローブが完了したら,それぞれの CPU 消費時間を 測定 すること。その後で,メソッドごとの平均 CPU 時間を 評価 して報告するように。"
OpenCore の説明では,この3つを分離することによって,"他のすべてのソリューションに見られるような,アクティビティの計測方法やアクティビティ起動の計測実施の有無を明示的に参照する必要がなくなる" ため,計測対象外のアクティビティに関わるオーバーヘッドを最小化できる,という利点がある。"その種の管理は,管理者が実際に計測するランタイムを設定することで行う" のだ。
プロジェクトの HowTo 資料 にもあるように,OpenCore をプロジェクトで使用するには,以下の基本ステップを実行する必要がある。
- コマンドラインで -agentpath と -javaagent を指定して,OpenCore ネイティブエージェントを追加する (注: エージェントは一部で AspectJ を使用している)。
- いくつかの OpenCore jar ファイルをクラスパスに追加する。
- JMX を有効にする。
- 構成ファイルを作成して,モニタの対象とその方法を指定する。
これ以降のアプリケーションと OpenCore の関連性の深さは,設定の内容によって異なってくる。最も基本的なレベルの場合,OpenCore は単にメソッドのコール回数をキャプチャして JMX にレポートするだけの存在だ。しかしエージェントがプラグイン可能なように設計されているので,組み込みで用意されている高度な指標や統計値を有効にしたり,あるいは独自の指標を開発して任意の値をキャプチャし,任意の場所にレポートすることも可能である。
このライブラリは,特に "オフ状態" の計測対象に関する オーバーヘッドの低さを特徴としている。OpenCore 認定のベンチマーク のひとつを例に取ると,VisualVM (Sun JDK に同梱されているもの) のプロファイリングは OpenCore のプローブより2ないし3倍低速,という結果が出ている。
ごく一般的なパフォーマンス診断での使用に加えて,OpenCore では "複数のアプリケーション,システム,ビジネス関連ドメインをひとつのモデルに統合する",すなわち,自動的なモニタリングとキャパシティ調整,チャージバックの使用度測定,SLA 適合性のトラッキングなどに使用可能である,と主張している。この統一されたビジョンは,しかしながら,それらドメインでベンダが OpenCore 技術を採用することが前提条件となる。
明確なスケジュールは発表されていないが,将来のリリースでは .NETやネイティブ版の Ruby,Python,PHP など,非JVM言語のパフォーマンス監視機能も提供される予定である。
最後に,OpenCore のオープンは "オープンソース" という意味ではなく,"統合と拡張のためのポイントが定義され,API として資料公開されている" という意味でのオープンである,ということに注意が必要だ。William Louth 氏の 先日の議論スレッド でも明記されているとおり,OpenCore はコマーシャルな製品なのである。