InfoQ

News

jmx4rでRuby流にJMXを使う方法

作者 Werner Schuster, 翻訳者 長部 広太 投稿日 2007年9月9日 午後9時12分

コミュニティ
Java,
Ruby
トピック
JRuby,
動的言語,
デプロイ/データセンター
タグ
JMX,
JRuby,
メタプログラミング

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日にリリースされました)

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。

Agile2008 チーム参加レポート - カンファレンス参加編

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。

Agile2008 チーム参加レポート - 動機/準備編

筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。

Javaトラブルシューティングメルマガ総集編 2008/08~09

エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。

モデル駆動アプローチがうまく機能しない(しなくなる)8 つの理由

この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。