BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース jmx4rでRuby流にJMXを使う方法

jmx4rでRuby流にJMXを使う方法

ブックマーク

Javaのような成熟したプラットフォーム上で、アプリケーションを動作させて恩恵を受けることの一つにモニタリングのような成熟した機能を使えるということがある。JRubyのコアチームメンバーであるOla Biniは、Javaのモニタリング機能がJRubyアプリケーションのメモリの振る舞いをモニタリングするのに役立つことを発見した(source)

モニタリング機能は無料で手に入れることができ、JRubyをJava6と一緒に動作させるだけです。Javaプロセスへアタッチすることが出来、またリモートからもアタッチすることが出来ます。そしてこの種の情報(Javaプロセス)を取得出来ます。あなたが使っているRubyも同じようなことが出来ますか?

Ola BiniがJVMのプロセスをモニターするのに使用したツールはJConsoleである。JConsoleはJava SE 5から付属されたツールだ。JMXの情報にアクセスする他の方法が利用できる。その方法とはJeff Mesnill(ブログ・英語)が作ったjmx4r(source)を使用することである。これを使ってJRubyのコードからJMX MBeansにアクセスすることが出来る。以下がそのシンプルなサンプルコードである。

require 'java'
require 'jmx4r'
memory = JMX::MBean.find_by_name "java.lang:type=Memory"
memory.verbose = true
memory.gc

上のサンプルコードは、デフォルトの接続パラメータで、ローカルホスト上にあるMBeanサーバーへ接続するサンプルコードだが、デフォルトの接続パラメータ以外にも、カスタムなJMX Service URLを使用してMBeanサーバーへ接続することも可能である。

Jmx4rはRubyのメタプログラミングテクニックを使用することによって、JMXのクライアントコードから決まりきったコードを排除する。jmx4rを使用することによって、RubyのようにJMXを操作出来たり、MBeansの属性にアクセスすることが出来る。

サンプルでは、memory.verboseは属性であり、この属性に値を設定するには通常冗長なJMXのメソッドを呼ばなくてはいけない。Jmx4rは、メモリのMBeanを表すクラスにアクセサを設定する。MBeanに関する情報が取得され、全ての属性に対する必要なメソッドを作成するのにdefine_method が使用される。

method_missingメソッドの力をかりて、これらの操作はサポートされる。method_missingメソッドとはコールしたメソッドが見つからない場合に呼ばれるメソッドである。サンプルコードでは、memory.gcはガーベッジコレクターを起動するメモリのMBeanのメソッドを呼び出しているが、そのようなメソッド即ちgcメソッドは、メモリオブジェクトのクラスには定義されていない。gcメソッドがコールされる代わりに、method_missingがコールされて、このメソッド名(gcメソッド)に対する操作があるかどうか探し出し、JMX APIを使用して、その操作を実行する。

jmx4rのようなライブラリの大きな利点は、JRubyのjirbのようなインタラクティブなシェルを使用して、ライブラリとインタラクティブにやりとり出来る点である。これを利用することによって、開発者又はJRubyに精通した管理者は、まだプログラムの負荷が高い時でも、ひとつ又はそれ以上のMBeanサーバーへアクセスすることが出来る。jmx4rは自動化されていない大量のジョブをこなさなくてはいけないときに有用である。jmx4rのサイトに、自動化されていない大量のジョブをこなすサンプルコードが掲載されている。

logging = JMX::MBean.find_by_name "java.util.logging:type=Logging"
logging.logger_names.each do |logger_name|
 logging.set_logger_level logger_name, "INFO"
end

このサンプルコードでは、全てのログに問い合わせて、一度にログレベルを変更するということを行なっている。グラフィカルなツールを使用した場合、ログ毎に数回のクリックが必要だ。言うまでもなく、一回上のサンプルコードを書いて実行できれば、そのコードをスクリプトに保存して再利用することが出来る。これの他の利点は、JRubyプロセスが、自身のMBeanサーバーへコンタクトすることによって、自分自身のJVMを監視することが出来ることである。

最近認証機能もサポートされた。以下は認証機能の使い方のサンプルコードである。

JMX::MBean.establish_connection :host => "localhost", 
 :username => "jeff", :password => "secret"

原文はこちらです:http://www.infoq.com/news/2007/06/jmx4r-jruby

(原文は2007年6月29日にリリースされました)

この記事に星をつける

おすすめ度
スタイル

BT