LightFishによるGlassFishの監視 Adam Bienに 聞く · Java Magazine:...

3
ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012 26 blog JAVA TECH COMMUNITY JAVA IN ACTION ABOUT US LightFishによるGlassFishの監視 Adam Bienに 聞く A dam Bien氏は、Java開発 者、特にJava EE関連の開発 者のみなさんにはおなじみで しょう。著名なJava Championであ り、JavaOneでのセッションが評価さ れてJavaOne Rock Starに選出さ れました。また、Oracle Magazineに より2010年のJava Developer of the Yearに選ばれています。Bien氏 は、生まれ育ったドイツ(さらにはヨー ロッパ大陸全体)でコンサルタントと して活躍する傍ら、Javaに関する書 籍も上梓しています。この記事では、 GlassFish向けのオープンソース監 視ツールであるLightFishについて、 Bien氏に話を聞きます。 Java Magazine: 先日、 GlassFish向け監視ツールである LightFishをリリースされました。この Java ChampionのAdam Bien氏が、自身の開発した新しいオープンソースのJava EE 6ストレス・テスト監視ツールについて語ります。 Arun Gupta ツールについてお聞かせください。 Bien氏: ストレス・テストは、一般的に軽視されています。 私は顧客のプロジェクトにおいて、ストレス・テストの実行中 にパフォーマンスの統計情報を収集して分析するための簡 単なツールを開発するようになりました。Java Magazine に寄稿した記事『Stress Testing Java EE 6 Applications』では、同様のツールを一から作成していま す。2011年にサンフランシスコで開催されたJavaOneカ ンファレンスで、オラクルのエンジニアから、セッションに参 加してこのツールを実際にデモンストレーションしてほしい と頼まれました。そのセッションの後で、当時はSTMと呼ん でいたこのツールをオープンソース化しようと思い付きま した。実際、最初のコミットはJavaOneのカンファレンスの 開催中に行いました。このコミットは今でもGitのログで見 ることができます。 LightFishはJava EE 6アプリケーションであり、ど のJava EE 6アプリケーション・サーバーにもデプロイで きます。LightFishでは、「ストレスのかかったGlassFish [GlassFish Under Stress]」マシン(図1参照)にREST を介してリモートでアクセスし、監視データを収集して永 続化します。永続化されたデータは、再度RESTを介して 公開されます。リアルタイムの監視クライアントである LightViewが、LightFishインスタンスに常時アクセスし ます。LightViewがストレスのかかったGlassFishマシン にアクセスすることはありません。 Java Magazine: 開発時の監視のためにローカルにデ 写真: PIOTR MALECKI / GETTY IMAGES

Transcript of LightFishによるGlassFishの監視 Adam Bienに 聞く · Java Magazine:...

Page 1: LightFishによるGlassFishの監視 Adam Bienに 聞く · Java Magazine: 開発時の監視のためにローカルにデ ... optimization is the root of all evil]」という格言が

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

26

blog

JAVA TECH

COMMUNITY

JAVA IN

ACTION

ABOUT US

LightFishによるGlassFishの監視

Adam Bienに 聞く

Adam Bien氏は、Java開発者、特にJava EE関連の開発者のみなさんにはおなじみで

しょう。著名なJava Championであり、JavaOneでのセッションが評価されてJavaOne Rock Starに選出されました。また、Oracle Magazineにより2010年のJava Developer of the Yearに選ばれています。Bien氏は、生まれ育ったドイツ(さらにはヨーロッパ大陸全体)でコンサルタントとして活躍する傍ら、Javaに関する書籍も上梓しています。この記事では、GlassFish向けのオープンソース監視ツールであるLightFishについて、Bien氏に話を聞きます。

J a v a M a g a z i n e : 先 日、GlassFish向け監視ツールであるLightFishをリリースされました。この

Java ChampionのAdam Bien氏が、自身の開発した新しいオープンソースのJava EE 6ストレス・テスト監視ツールについて語ります。 Arun Gupta

ツールについてお聞かせください。Bien氏: ストレス・テストは、一般的に軽視されています。私は顧客のプロジェクトにおいて、ストレス・テストの実行中にパフォーマンスの統計情報を収集して分析するための簡単なツールを開発するようになりました。Java Magazineに寄稿した記事『Stress Test ing Java EE 6 Applications』では、同様のツールを一から作成しています。2011年にサンフランシスコで開催されたJavaOneカンファレンスで、オラクルのエンジニアから、セッションに参加してこのツールを実際にデモンストレーションしてほしいと頼まれました。そのセッションの後で、当時はSTMと呼んでいたこのツールをオープンソース化しようと思い付きました。実際、最初のコミットはJavaOneのカンファレンスの開催中に行いました。このコミットは今でもGitのログで見ることができます。LightFishはJava EE 6アプリケーションであり、ど

のJava EE 6アプリケーション・サーバーにもデプロイできます。LightFishでは、「ストレスのかかったGlassFish [GlassFish Under Stress]」マシン(図1参照)にRESTを介してリモートでアクセスし、監視データを収集して永続化します。永続化されたデータは、再度RESTを介して公開されます。リアルタイムの監視クライアントであるLightViewが、LightFishインスタンスに常時アクセスします。LightViewがストレスのかかったGlassFishマシンにアクセスすることはありません。Java Magazine: 開発時の監視のためにローカルにデ

写真: PIOTR MALECKI / GETTY IMAGES

Page 2: LightFishによるGlassFishの監視 Adam Bienに 聞く · Java Magazine: 開発時の監視のためにローカルにデ ... optimization is the root of all evil]」という格言が

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

27

blog

JAVA TECH

COMMUNITY

JAVA IN

ACTION

ABOUT US

プロイし、本番環境で利用するにはリモートで監視するのですね。どのようなデータを監視できますか。Bien氏: GlassFishで公開される、あらゆるデータです。GlassFishのREST監視APIでは、データが一貫した形式で公開されます。目的の属性を取得するには、メソッドを1回呼び出すだけです。現時点では、LightFishは重要なデータのみを監視します。重要なデータとは、monitoringTime、used-HeapSize、threadCount , peakThread-Count、totalErrors , currentThread-Busy、committedTX、ro l ledBackTX、 queuedConnections、activeSessions、 expiredSessions、escalationReasonに加えて、インストールされているすべてのJDBC接続に関する監視データ、インストールされているすべてのアプリケーションのリストと起動時間です(図2参照)。属性の内容は、それぞれの名前が表しているとおりです。これらの属性は、JPA [Java Persistence API]のSnapshotエンティティの属性(データベースの列)、および同じ構造を持つXMLエンティティとして公開された属性です。すべてのメタデータは、単一のエンティティから取得されます。JavaFX 2.0ベースのクライアント

であるLightViewは、HTTPリクエストのGETメソッドを使用してLightFishを呼び出します。LightFishは、このクライアントからの接続をブロックし、EJBのタイマーによって次のSnapshotが生成されてアクセス可能になるまで待機します。このため、リアルタイムで監視しているように感じられますが、サーバーに過度な負荷がかかることはありません。LightFishでは、Servlet3.0の非同期処理を利用してこの機能を実装しており、数千もの監視クライアントを処理できます。LightViewは、MVC [モデル・ビュー・コントローラ]パターンに基づき、データ・バインディングを使用して構築されています。各グラフがSnapshotエンティティの1つの属性にバインドされています。監視データは永続化

されるため、テストの実行後、任意のレポート・ツールを使用してデータを解析できます。Java Magazine: LightFishのアーキテクチャには、ユーザーが独自に定義した監視データを公開できるような拡張性がありますか。Bien氏: LightFishの最新バージョンは、スクリプティングに対応しています。実行時に、JavaScriptで記述した新規ルールを永続的に登録し、直前のSnapshotインスタンスや現在のSnapshotインスタンスに対して評価することができます。たとえば、「ヒープ・サイズが特定のサイズまで増加した場合に通知する」といったルールを簡単に作成できます。このような通知ルールを作成すると、LightFishによって新しい「エスカレーション」チャネルが実行時に自動作成されます。このチャネルは、任意のツールを使用して登

録できます。また、LightViewでは、エスカレーションされたすべての値を含む表が新しいタブに表示されます。この構造はSnapshotエンティティ

内にハードコーディングされています。そのため、まだ公開されていないメトリクスを解析するには、SnapshotとLightViewを拡張する必要があります。監視する属性を1つ追加するためにかかる時間は、通常はテストも含めて15分程度です。ただし、プラグイン機構の導入も検

討中です。Java Magazine: GlassFish上でJava EE 6アプリケーションを開発する場合、LightFishを使用するとどのようなメリットがありますか。

Bien: Java EE 6開発者ならフレームワークのライブラリやインフラストラクチャについてあまり考えることなくビジネス・ロジックの実現に集中できるようになります。LightFishを活用することで、夜間にストレス・テストを行って潜在的なボトルネックを特定できます。「早すぎる最適化は諸悪の根源である[Premature optimization is the root of all evil]」という格言がありますが、Java EE 6には特に当てはまります。ビジ

図1

図2

単純な規則「早すぎる最適化は諸悪の根源である」という格言は、Java EE 6には特に当てはまります。ビジネス・コードは単純にし、何度もストレス・テストを実行して、必要に応じた最適化を行うことが重要です。

Page 3: LightFishによるGlassFishの監視 Adam Bienに 聞く · Java Magazine: 開発時の監視のためにローカルにデ ... optimization is the root of all evil]」という格言が

ORACLE.COM/JAVAMAGAZINE ////////// JULY/AUGUST 2012

28

blog

JAVA TECH

COMMUNITY

JAVA IN

ACTION

ABOUT US

ネス・コードは単純にし、何度もストレス・テストを実行して、必要に応じた最適化を行うことが重要です。Java Magazine: LightFishの開発に利用したGlassFishの機能を教えてください。Bien氏: LightFishでは、GlassFishの管理用と監視用のREST APIのみを利用しています。管理用REST APIによって監視を実現し、監視用REST APIによって監視データを取得しています。GlassFishのバイナリには依存していません。LightFishを他のアプリケーション・サーバーに移植するのは簡単でしょう。RESTインタフェースはベンダー固有のため、org.lightfish.business.monitoring.control.SnapshotProvider#fetchSnapshotという1つのメソッドの実装を、たとえばJbossを監視できるように変更する必要があります。もっとも、私はプロジェクトの大半でGlassFishを利用しています。そのため、このメソッドの実装を変更する予定は今のところありません。Java Magazine: パフォーマンスのオーバーヘッド

はありますか。Bien氏: LightFishはGlassFishをポーリングします。デフォルトでは、LightFishは2秒ごとに数件のGETリクエストを実行します。しかし、これはデフォルトに過ぎず、実行時に設定できます。夜間にストレス・テストを行う場合は、リクエストの間隔を長くして、影響を最小限にすることができます。LightFishは私のx-ray blog statisticsソフトウェアを常に監視していますが、オーバーヘッドはごくわずかとなっています。Java Magazine: GlassFishを最初のアプリケーション・サーバーとして選択したのはなぜですか。また、LightFishを他のアプリケーション・サーバーに移植する予定はありますか。Bien氏: 私の顧客は、GlassFishをバージョン2.0からずっと利用しています。GlassFishを採用した理由は、私のJava EEプロジェクトがすべてGlassFishをベースとしているためです。LightFishを他のアプリケーション・サーバーに移植することは、簡単ですが面白みのない作業です。移植に時間を費やすよりは、新しい機能を実装したいと考えています。LightFishは私にとって仕事ではなく趣味のオープンソース・プロジェクトですから、面白くなければなりません。Java Magazine: 今後の計画について教えてください。また、LightFishをさらに改善していくためにJava EE 6のコミュニティが支援できることはありますか。Bien氏: やるべきことは山ほどあります。現時点で

は、LightFishで監視できるのはJava EEの動作だけです。EJB [Enterprise JavaBeans]やJPAメタデータについても取り組みたいと考えています。また、アプリケーションに依存する監視情報の解析についても検討しています。何かアイデアがあれば、github .com/AdamBien/lightfishをフォークしてください。唯一の条件は、コードをJava EEの様式で開発することです。つまり、できるだけ単純なコードを使用し、外部への依存を最小限に(できればゼロに)してください。LightFishはApache Licenseの下で開発されています。Java Magazine: 開発者は、何から始めればよいですか。Bien氏: lightfish.warをダウンロードし、glassfish/domains/domain1/autodeployフォルダに格納してください。LightFishは数秒でインストールされます。これ以外の操作は必要ありません。ただ、もし私がその開発者なら、コードもダウンロードすると思います。LightFishでは、余計な要素のない単純なコードを書くように心がけました。最近のいくつかのカンファレンスで、Java EEの機能を説明するためにLightFishのコードを使用したほどです。LightFishを紹介するスクリーンキャストも作成しました[左にある再生ボタンをクリックすると再生できます]。 </article>

コーヒーを飲みながらLightFishについて語る、Java ChampionのAdam Bien氏とJavaエバンジェリストのArun Gupta。 今年5月、GeeCON 2012カンファレンスの ため滞在中のポーランドの ポズナンにて。

Arun Gupta (@arungupta):オラクルのJavaエバンジェリスト。Java EE、GlassFish、Oracle WebLogic Serverに関するコミュニティの創設と推進に携わる。ソフトウェア業界で15年以上の実績がある。

LEARN MORE• Adam Bien氏のブログ

Adam Bien氏によるLightFishのデモンストレーション