BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース CRaSH: JVMを監視するコマンドラインシェル

CRaSH: JVMを監視するコマンドラインシェル

原文(投稿日:2012/06/27)へのリンク

CRaSH (Common ReusAble SHell)は起動中のJavaプロセスに接続しその内部を調べることができるユーティリティだ。単なるJavaで書かれたシェル(BeanShellのような)ではなく、Java Management Extensions (JMX)と同じように、実行中のJVMアプリケーションをリモートから管理、監視できる。

JavaアプリケーションでJMXを使う場合、明示的に設定をする必要がある。JavaにはデフォルトでJConsoleのようなグラフィカルなツールが含まれており、最近では、実行中のJavaアプリケーションに接続して、メモリ使用やスレッドなどの統計情報やJVMのプロパティなどを収集できるVisualVMも付属している。

また、JMXを使うと開発者や管理者は実行中のアプリケーションの設定を変更できる。この機能はMBeanインターフェイスとして開発者が公開した機能に対してのみ提供される。しかし、Java 6からはAttach APIをプログラムで操作することで、実行中のJVMに直接接続できる監視アプリケーションを作成するできる。例えば、jtopはCPUの利用を監視する。ただし、このAttach APIはHotSpot VMにだけ適用できる。

CRaSHはこの機能のさらに推し進める。Attach APIを利用し、コマンドラインシェル(内部コマンド、コマンド履歴や自動補完を搭載した)を提供する。このシェルは実行中のJVMに接続し、そのJVMに対してGroovyスクリプトを実行できる。これによってそのJVMの内部を詳細に監視できる。

CRaSHがビルドインでサポートしているのは次の通り。

  • VMのプロパティの調査と変更、ガベージコレクタの実行。
  • JDBCリソースへのSQLアクセス
  • telnet/SSHを使ったアクセス(JMXはJava RMIを使うが、ファイアウォールの問題がある)
  • メモリ情報の調査
  • JVMスレッドの管理
  • 外部のGroovyスクリプトの読み込み
  • JCR(例えばJackrabbit)へのアクセス
  • ログ出力

CRaSHの中核の機能は動画で紹介されている。この動画ではJVMに対してGroovyのスクリプトを実行している。また、別の動画では、もっと現実的な使い方を紹介している。この動画では、CRaSHでアプリケーションサーバに接続し、JDBCコマンドを使ってデータソースにSQLを発行している。CRaSHは、実行中のJVMと開発者が監視用の"レシピ"として作成したGroovyスクリプトの間にある薄いレイヤなのだ。

CRaSHの想定される利用例は、

  • 実行中のJVMアプリケーションを監視する(JMXと同じように管理に使う)
  • 実行中のJVMアプリケーションのチューニングをする(開発者向けの使い方)
  • 実行中のJVMアプリケーションのデバッグ/ロギング(特定の処理の後で)
  • 既存のJVMアプリケーションにコマンドラインインターフェイスを追加する(上級者向けの使い方)
  • 実行中のアプリケーションに"プラグイン"を簡単に追加する
  • 実行中のJVMアプリケーションの一部分のモックとして使ったり、I/O処理に割り込みをする
  • 異なるリソース/サービスをひとつの観点から編成する
  • JavaとGroovyのコードをつなぐ

CRaSHは年初にバージョン1.0をリリースし、基本的な使い方を紹介したオンラインデモを提供している。より詳しい情報はドキュメントJavadocGoogleユーザグループを参照。ソースコードはGitHubにある。

 

この記事に星をつける

おすすめ度
スタイル

BT