Open MQ4.1を使ってみよう!第7回 MQ4.1をJMXを使って管理してみる
MQ4.1から完全にJMX仕様に準拠され、MQソフトウエア中の状態監視/操作が全てJMX経由で
できるようになりました。
今回はJavaに標準で付属するJConsole-JMXクライアントを使ってMQ4.1の監視/管理をしてみたいと思います。
まずは、MQ4.1ブローカをVerboseモードで起動します。
cd C:\software\MQ4.1\mq\bin
imqbrokerd -tty
起動ログ中に、以下の文字列が書かれています。
JMX コネクタサーバー jmxrmi は URL service:jmx:rmi://testhost/stub/rO0A<<中略>>AAeA== で正常に起動しました
このserviceから==までの部分がJMXリモート接続するためのURLとなります。
補足:Verboseモードで起動していない場合のJMXコネクタURLの確認方法
以下のコマンドでJMXのURLを照会します。
このコマンドを実行するとJMXのURLが表示されます。これをmemo帳などに書き留めておきます。C:\software\MQ4.1\mq\bin>imqcmd list jmx
ユーザ名: admin
パスワード: admin
次にJConsoleを起動します。
JConsoleは、<<JDKのインストール場所>>\bin\jconsole.exeになります。
#私の環境ではD:\jdk1.5.0_12\bin\jconsoleです。
注意:JREのみしかインストールしていないとjconsole.exeがない場合があります。
その場合は、http://java.sun.comからJDKをダウンロードしてインストールしてください。
jconsole.exeをクリックするとJConsoleアプリケーションが起動します。
起動と共に、接続ダイアログボックスが表示されます。

詳細タブをクリックします。するとJMX URLを入力する入力フィールドが表示されるので
先ほど調べておいたservice:jmx:rmi://testhost/stub/rO0A...(注:環境によって変わります)
を入力します。
JMX URL: service:jmx:rmi://testhost/stub.....
ユーザ名:admin
パスワード:admin
全ての値を入力したら、接続ボタンを押します。

接続が成功すると、MQが登録しているJMXサーバとJConsoleの通信が行われ、様々なMQの内部値を監視することができます。
メニューの下にあるタブをクリックすることで様々な状況を確認することができます。
・MQブローカのメモリ使用状況

・MQブローカが稼動するJVMのスレッド状況とスタックトレース

・MQブローカが稼動するJVMでロードされたクラスの状況

一番強力で便利なのが、MBeanタブです。
MQ4.1では実行時の内部値をMBeanとして管理しています。今現在の詳しいMQの内部の値(例:現在の接続数など)を確認することができます。
・MQ4.1中のキュー「ABC」の詳細設定を確認

上の図で青色で表示されている数字などは「その場で上書き可能」を意味しています。
例えば、上の設定ではキュー「ABC」の同時に持てるプロデューサ数(MaxNumProducers)は100ですが、これを無制限(-1)に変更してみたいと思います。
直接100の値を-1に書き換えてから、ツール下にある「更新」ボタンを押します。

これで、無制限に変更されました。念のため、imqcmdにて値がきちんと変更されたかを確認してみましょう。
C:\software\MQ4.1\mq\bin>imqcmd query dst -t q -n ABC
ユーザ名: admin
パスワード: admin
送信先を照会中:--------------
送信先名 送信先タイプ
--------------
ABC キュー次で指定されたブローカ上で:
---------------------
ホスト プライマリポート
---------------------
localhost 7676送信先名 ABC
送信先タイプ キュー
送信先の状態 RUNNING
管理用に作成 false現在のメッセージ数
Actual 100
トランザクションに保持されました 0
現在のメッセージサイズ (バイト単位)
Actual 211600
トランザクションに保持されました 0
現在のプロデューサ数 0
現在のアクティブなコンシューマ�� 0
現在のバックアップコンシ���ーマ数 0メッセージの最大数 100000
メッセージの最大合計サイズ (バイト単位) 10737418240
1 メッセージ当たりの最大サイズ (バイト単位) 10485760
プロデューサの最大数 無制限 (-1)
アクティブなコンシューマの最大数 無制限 (-1)
バックアップコンシューマの最大数 0制限の動作 REJECT_NEWEST
コンシューマフローの制限 1000
ローカルの送信先 false
ローカル配信優先 false
デッドメッセージキューを使用 true送信先の照会に成功しました。
プロデューサの最大数 無制限 (-1)
となっていますね。
同様に、Config系の値の即時変更、Runtime系の値の監視などを行うことができます。
次に、値を監視/更新するだけではなく、MBeanが持つ特定の「オペレーション」を呼び出してみましょう。
JConsole左側のツリーからcom.sun.messaging.jms.server.Service.Config.jmsをクリックします。クリックしたら、右ペインの「操作」タブをクリックしてこのMBeanの持つ操作をリストします。

このMBeanはMQ4.1ブローカのJMSサービスを表現しています。操作にはpauseとresumeがあるのがわかります。pauseボタンを押してください。
「Method successfully invoked」と表示されればOKです。

imqcmdにて、JMSサービスがどうなっているのかを確認してみましょう。
C:\software\MQ4.1\mq\bin>imqcmd list svc
ユーザ名: admin
パスワード: admin
指定されたブローカ上のすべてのサービスのリスト:---------------------
ホスト プライマリポート
---------------------
localhost 7676--------------------------------
サービス名 ポート番号 サービス状態
--------------------------------
admin 1497 (動的) RUNNING
httpjms - UNKNOWN
httpsjms - UNKNOWN
jms 0 (動的) PAUSED
ssladmin 動的 UNKNOWN
ssljms 動的 UNKNOWNサービスのリストに成功しました。
jms 0 (動的) PAUSED
となっているのがわかります。
#imqcmd pause bkrと同じ効果です
それでは一時停止を解除してみましょう。JConsoleのresumeボタンを押してください。
「Method successfully invoked」と表示されればOKです。

imqcmdにてサービスの状態を確かめてみます。
C:\software\MQ4.1\mq\bin>imqcmd list svc
ユーザ名: admin
パスワード: admin
指定されたブローカ上のすべてのサービスのリスト:---------------------
ホスト プライマリポート
---------------------
localhost 7676--------------------------------
サービス名 ポート番号 サービス状態
--------------------------------
admin 1497 (動的) RUNNING
httpjms - UNKNOWN
httpsjms - UNKNOWN
jms 1527 (動的) RUNNING
ssladmin 動的 UNKNOWN
ssljms 動的 UNKNOWNサービスのリストに成功しました。
jms 1527 (動的) RUNNING
となっているのが確認できます。
今回はたまたまJConsoleからMBean値の監視をしていますが、JMX-APIを使っても同様のことが可��です。プログラムからJMXの特定の値の監視または、MBeanオペレーションを使って様々な管理操作ができます。��視ソフトからJMXの値を取得してアラートをあげるなんていう使い方もできますね。また、EclipseなどでリリースされているJMXプラグインも使うことができます。
次回はMQクラスタの構成方法について書きたいと思います。
