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を照会します。

C:\software\MQ4.1\mq\bin>imqcmd list jmx
ユーザ名: admin
パスワード: admin

このコマンドを実行するとJMXのURLが表示されます。これをmemo帳などに書き留めておきます。
次に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クラスタの構成方法について書きたいと思います。

投稿されたコメント:

コメント
コメントは無効になっています。

This blog copyright 2009 by naokitakemura