Sun Java System Message Queue 3 2005Q4 管理ガイド |
第 6 章
物理的送信先の管理この章では、imqcmd ユーティリティーを使用して、物理的送信先を管理する方法を説明します。Message Queue メッセージは、ブローカ上の物理的送信先によりコンシューマクライアントにルーティングされます。ブローカは物理的送信先に関連したメモリーと持続ストレージを管理し、その動作を設定します。
クラスタで、1 つのブローカ上に物理的送信先を作成すると、クラスタはその物理的送信先をすべてのブローカに伝えます。アプリケーションクライアントは、トピックにサブスクライブするか、クラスタ内の任意のブローカにあるキューから消費できます。こればブローカが共同作業でクラスタ間のメッセージをルーティングするためです。ただし、最初にメッセージが生成されたブローカだけは、そのメッセージの持続性と通知を管理します。
この章では、次のトピックについて説明します。
表 13-5 に、物理的送信先を管理し、そのタスクを実行するための imqcmd サブコマンドに関する詳細を示します。
物理的送信先の概要については、『Message Queue 技術の概要』を参照してください。
注
クライアントアプリケーションは、物理的送信先と対話する場合は常に Destination オブジェクトを使用します。プロバイダへの非依存性と移植性のために、クライアントは通常は管理者が作成した送信先オブジェクトを使用し、これは送信先管理対象オブジェクトと呼ばれます。第 8 章「管理対象オブジェクトの管理」で説明するように、管理対象オブジェクトはクライアントアプリケーションで使用できるように設定できます。
コマンドユーティリティーの使用Message Queueコマンドユーティリティー (imqcmd) を使用して、物理的送信先を管理します。imqcmd コマンドの構文は、ほかのブローカサービスの管理に使用する場合と同じです。
imqcmd とそのサブコマンド、オプションについての詳細は、第 13 章「コマンド行のリファレンス」で説明しています。
サブコマンド
表 6-1 には imqcmd サブコマンドが掲載されています。この章では、その使用法について説明します。これらのサブコマンドの詳細は、「物理的送信先管理」を参照してください。
物理的送信先の作成物理的送信先を作成するには、imqcmd create サブコマンドを使用します。次に示すのは、create サブコマンドの構文です。
物理的送信先を作成するときには、次の情報を指定する必要があります。
また、物理的送信先を更新する場合、プロパティーも設定できます。
物理的送信先の多くのプロパティーが、ブローカのメモリーリソースおよびメッセージフローに影響します。たとえば、物理的送信先に送信できるプロデューサの数、送信可能なメッセージの数とサイズ、および物理的送信先の制限に達したときにブローカが行う応答を指定できます。この制限は、ブローカの設定プロパティーによって制御されるブローカ全体の制限に似ています。
次のプロパティーは、キューの送信先とトピックの送信先のいずれにも使用します。
- maxNumMsgs。物理的送信先で許容されるコンシューマ配信されないメッセージの最大数を指定します。
- maxTotalMsgBytes。物理的送信先でコンシューマ配信されないメッセージ用として許容されるメモリーの最大量をバイト単位で指定します。
- limitBehavior。メモリー制限のしきい値に達したときのブローカの応答方法を指定します。
- maxBytesPerMsg。物理的送信先で許容されるシングルメッセージの最大サイズをバイト単位で指定します。
- maxNumProducers。物理的送信先のプロデューサの最大数を指定します。
- consumerFlowLimit。1 つのバッチでコンシューマに配信されるメッセージの最大数を指定します。
- isLocalOnly。ブローカクラスタに対してのみ適用します。物理的送信先がそのほかのブローカに複製されないように指定します。つまり、メッセージの配信をローカルコンシューマ (物理的送信先の作成元にあるブローカに接続されたコンシューマ) だけに制限します。
- useDMQ。物理的送信先のデッドメッセージを破棄するか、デッドメッセージのキューに配置するかを指定します。
次のプロパティーは、キューの送信先にのみ使用します。
物理的送信先のプロパティーについての詳細は、第 15 章「物理的送信先のプロパティーのリファレンス」を参照してください。
自動作成される送信先の場合は、ブローカのインスタンス設定ファイルにデフォルトのプロパティー値を設定します。自動作成されるプロパティーの詳細を、表 14-3 に示しています。
物理的送信先を作成する
物理的送信先の一覧表示物理的送信先の現在のプロパティー値、物理的送信先に関連付けられているプロデューサまたはコンシューマの数、物理的送信先内のメッセージの数とサイズなどのメッセージングメトリックスに関する情報を取得できます。
情報を入手する物理的送信先を探す場合は、list dst サブコマンドを使用して、ブローカのすべての物理的送信先を一覧表示します。次に示すのは、list dst サブコマンドの構文です。
このコマンドは、指定されたタイプの物理的送信先を一覧表示します。送信先のタイプ (-t) オプションの値は、q (キュー) または t (トピック) のいずれかになります。
送信先のタイプを指定しない場合は、すべてのタイプの物理的送信先が一覧表示されます。
list dst サブコマンドを使用すると、任意で、一覧表示する送信先のタイプを指定したり、一時的送信先を含めたりすることができます (-tmp オプションを使用)。一時的送信先はクライアントによって作成され、通常は、そのほかのクライアントへ送信されたメッセージへの返信を受信することを目的としています。
たとえば、myHost のポート 4545 上で実行しているブローカ上の物理的送信先すべてのリストを取得するには次のコマンドを入力します。
送信先のタイプ t でトピックのみを指定している場合を除き、デッドメッセージキューの情報 mq.sys.dmq がほかの物理的送信先と一緒に常に表示されます。
物理的送信先の情報の表示物理的送信先の現在のプロパティーに関する情報を入手するには、query dst サブコマンドを使用します。次に示すのは、query dst サブコマンドの構文です。
このコマンドは、特定のタイプと名前の送信先に関する情報を一覧表示します。たとえば、次のコマンドはキューの送信先 XQueue に関する情報を表示します。
このコマンドでは、次のような情報が出力されます。
また、出力は送信先に関連付けられたプロデューサとコンシューマの数を示しています。キューの送信先について、数字にはアクティブなコンシューマとバックアップコンシューマが含まれます。
update dst サブコマンドを使用すると、1 つ以上のプロパティーの値を変更できます (「物理的送信先のプロパティーの更新」を参照)。
物理的送信先のプロパティーの更新物理的送信先のプロパティーを変更するには、update dst サブコマンドと -o オプションを使用して、更新するプロパティーを指定します。次に示すのは、update dst サブコマンドの構文です。
このコマンドは、指定した送信先の特定のプロパティー値を更新します。プロパティー名は、表 15-1 で説明しているいずれかのプロパティーになります。
複数の -o オプションを使用すると、複数のプロパティーを更新できます。たとえば、次のコマンドでは maxBytesPerMsg プロパティーが 1000 に、MaxNumMsgs プロパティーが 2000 にそれぞれ変更されます。
更新が可能なプロパティーについては、第 15 章「物理的送信先のプロパティーのリファレンス」を参照してください。
物理的送信先の type や isLocalOnly プロパティーを更新する場合、update dst サブコマンドは使用できません。
注
デッドメッセージキューは、特殊な物理的送信先であり、プロパティーがその他の送信先のプロパティーと多少異なります。詳細は、「デッドメッセージキューの使用の設定」を参照してください。
物理的送信先の停止と再開プロデューサから送信先、送信先からコンシューマ、またはその両方のメッセージの配信を制御するために、物理的送信先を停止できます。特に、メッセージの生成が消費よりかなり高速な場合に、送信先がメッセージによって過負荷にならないように、送信先へのメッセージフローを停止できます。圧縮する前に物理的送信先を停止する必要があります。
物理的送信先との間で配信されるメッセージを停止するには、pause dst サブコマンドを使用します。次に示すのは、pause dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の送信先について、コンシューマへのメッセージ (-pst CONSUMERS)、プロデューサからのメッセージ (-pst PRODUCERS)、またはその両方 (-pst ALL) を停止します。送信先のタイプと名前が指定されない場合、すべての物理的送信先が停止します。デフォルト値は ALL です。
例:
停止した送信先への配信を再開するには、resume dst サブコマンドを使用します。次に示すのは、resume dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の停止された送信先についてメッセージの配信を再開します。送信先のタイプと名前が指定されていない場合は、すべての送信先が再開されます。
例:
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。各インスタンスを個別に停止する必要があります。
物理的送信先の消去物理的送信先のキューに現在入っているメッセージは、すべて消去することが可能です。物理的送信先を消去すると、送信先に保存されているすべてのメッセージが削除されます。
累積されたメッセージによって、システムのリソースが大幅に消費される場合に、これらのメッセージを消去することができます。これは、登録済みのコンシューマクライアントがキューに入っていない場合やキューが多数のメッセージを受信する場合に発生する可能性があります。また、トピックの永続サブスクライバが、アクティブにならない場合にも発生する可能性があります。どちらの場合も、メッセージが必要以上に保持されます。
物理的送信先でメッセージを消去するには、purge dst サブコマンドを使用します。次に示すのは、purge dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先のメッセージを消去します。
例:
ブローカをシャットダウンした後、再起動するときに、古いメッセージを配信する必要がない場合は、-reset messges オプションを使用して、古いメッセージを消去します。たとえば、次のとおりです。
これで、ブローカを再起動すると、送信先の消去に関する問題が解消されます。
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。これらの送信先はそれぞれ個別に消去する必要があります。
物理的送信先の破棄物理的送信先を破棄するには、destroy dst サブコマンドを使用します。次に示すのは、destroy dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先のメッセージを破棄します。
例:
物理的送信先を破棄すると、その送信先のすべてのメッセージが消去され、ブローカからその送信先がなくなるため、操作を元に戻すことはできません。
デッドメッセージキューを破棄することはできません。
物理的送信先の圧縮メッセージの持続ストアとして、ファイルベースのデータストアを使用している場合は、ディスク利用率を監視し、必要に応じてディスクを圧縮できます。
ファイルベースのメッセージストアは、保持される物理的送信先に応じてメッセージがディレクトリに格納されるように構成されています。各物理的送信先のディレクトリでは、大半のメッセージが可変長のレコードから成る 1 つのファイル、つまり可変長のレコードファイルに格納されます。断片化を減らすため、サイズが設定可能なしきい値を超えているメッセージは専用の個別のファイルに格納されます。
可変サイズのメッセージが保持されていて、その後可変長のレコードファイルから削除された場合、空きレコードが再利用されていないファイルに空白ができることがあります。
未使用の空きレコードを管理するために、コマンドユーティリティーには、物理的送信先ごとにディスク利用率を監視したり、利用率の低下時に空きディスクスペースを再利用したりするためのサブコマンドが含まれています。
物理的送信先のディスク利用率の監視
物理的送信先のディスク利用率を監視するには、次のようなコマンドを使用します。
このコマンドでは、次のような情報が出力されます。
--------------------------------------
Reserved Used Utilization Ratio
--------------------------------------
806400 804096 99
1793024 1793024 100
2544640 2518272 98
サブコマンド出力の各列の意味は次のとおりです。
表 6-2 物理的送信先ディスク利用率のメトリックス
メトリックス
説明
Reserved (予約済み)
すべてのレコードによって使用されるディスクスペース (バイト単位)。アクティブメッセージを保持するレコードと再利用可能な空きレコードが含まれます。
Used (使用中)
アクティブメッセージを保持しているレコードによって使用されるディスクスペース (バイト単位)。
Utilization Ratio (利用率)
使用されているディスクスペースを予約済みのディスクスペースで割ったときの商。割合が高いほど、アクティブメッセージを保持するためにより多くのディスクスペースが使用されています。
未使用の物理的送信先ディスクスペースの再利用
ディスク利用率のパターンは、特定の物理的送信先を使用しているメッセージングアプリケーションの特性によって異なります。また、物理的送信先との間でやり取りされる相対的なメッセージフローとメッセージの相対的なサイズに応じて、時間の経過とともに予約済みディスクスペースが拡大することがあります。
メッセージの生成レートがメッセージの消費レートを上回る場合は、一般に、空きレコードが再利用され利用率が高くなります。ただし、メッセージの生成レートがメッセージの消費レートと同程度かそれより低い場合は、利用率は低いと予測できます。
一般に、予約済みディスクスペースは安定化させ、利用率は高いまま維持させる必要があります。一般的に、システムが安定して、予約済みディスクスペースがほぼ一定になり利用率が高い (75% を超える) 状態に達した場合には、未使用のディスクスペースを再利用する必要はありません。システムが安定した状態になったが利用率が低い (50% を下回る) 場合は、ディスクを圧縮し、空きレコードが占有しているディスクスペースを再利用できます。
データストアを圧縮する場合は、compact dst サブコマンドを使用します。次に示すのは、compact dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先に対応するファイルベースのデータストアを圧縮します。送信先のタイプと名前が指定されていない場合は、すべての送信先が圧縮されます。圧縮する前に、物理的送信先を停止する必要があります。
予約済みのディスクスペースが時間の経過とともに増え続けている場合は、送信先メモリーの制限プロパティーと制限動作を設定して送信先のメモリー管理を設定し直す必要があります (表 15-1 を参照)。
未使用の物理的送信先ディスクスペースを再利用する
送信先のタイプと名前が指定されなかった場合、これらの操作はすべての物理的送信先に対して実行されます。
デッドメッセージキューの使用の設定デッドメッセージキュー mq.sys.dmq は、ブローカとブローカのその他の物理的送信先のデッドメッセージを保持する、システムで生成された物理的送信先です。デッドメッセージキューは、監視、システムの効率性の調整、トラブルシューティングに使用するツールです。「デッドメッセージ」の定義と、デッドメッセージキューの概要については、『Message Queue 技術の概要』を参照してください。
ブローカは起動時に自動的にデッドメッセージキューを作成します。ブローカは処理できないメッセージ、または生存期間を過ぎたメッセージを、キューに配置します。さらに、その他の物理的送信先が廃棄したメッセージの保持にデッドメッセージキューを使用することもあります。デッドメッセージキューを使用することで、システムのトラブルシューティングに有益な情報がもたらされます。
デッドメッセージキューの使用の設定
デフォルトでは、物理的送信先は、デッドメッセージキューを有効に設定しています。物理的送信先がデッドメッセージキューを使用しないように設定できます。あるいは物理的送信先プロパティー useDMQ を設定して有効にすることもできます。
次の例では、デフォルトでデッドメッセージキューを使用する、myDist と呼ばれるキューが作成されます。
次の例では、同じキューに対してデッドメッセージキューの使用が無効になります。
ブローカ上の自動作成されたすべての物理的送信先で、デッドメッセージキューの使用を有効にしたり、imq.autocreate.destination.useDMQ ブローカプロパティーを設定して、デッドメッセージキューの使用を無効にしたりできます。
デッドメッセージキューを設定し管理する
Message Queueコマンドユーティリティー (imqcmd) を使用して、デッドメッセージキューをほかのキューと同じように管理できますが、いくつかの相違点があります。たとえば、デッドメッセージキューはシステムで生成されるため、作成、停止、破棄の操作は行えません。さらに、表 6-3 に示すように、デッドメッセージキューのデフォルト値は通常のキューと異なる場合があります。
デッドメッセージキューのプロパティー
デッドメッセージキューは、ほかのキューの設定と同様に設定しますが、特定の物理的送信先のプロパティーは適用されません。あるいは別のデフォルト値が指定されます。表 6-3 にデッドメッセージキューが独自の方法で処理するキュープロパティーを一覧表示しています。
表 6-3 標準の物理的送信先プロパティーのデッドメッセージキューの処理
プロパティー
デッドメッセージキューによる固有の処理
limitBehavior
デッドメッセージキューのデフォルト値は、REMOVE_OLDEST です。その他のキューのデフォルト値は REJECT_NEWEST です。デッドメッセージキューでは、フロー制御はサポートされません。
localDeliveryPreferred
デッドメッセージキューに適用されません。
maxNumMsgs
デッドメッセージキューのデフォルト値は、1000 です。その他のキューのデフォルト値は -1 (無制限) です。
maxNumProducers
デッドメッセージキューに適用されません。
maxTotalMsgBytes
デッドメッセージキューのデフォルト値は、10M バイトです。その他のキューのデフォルト値は -1 (無制限) です。
isLocalOnly
ブローカクラスタで、デッドメッセージキューは常にローカルの物理的送信先になり、このプロパティーは永続的に true に設定されます。ただし、ローカルブローカがメッセージをデッドメッセージとマークしている場合、ローカルブローカのデッドメッセージキューには、クラスタのほかのブローカのクライアントが生成したメッセージが格納される場合があります。
メッセージの内容
ブローカはメッセージ全体をデッドメッセージキューに配置できます。あるいはヘッダーとプロパティーデータのみを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。
デッドメッセージキューのサイズを減らし、デッドメッセージを復元する予定がない場合は、imq.destination.DMQ.truncateBody ブローカプロパティーを true に設定することを検討してください。
これにより、メッセージ本体が破棄され、ヘッダーとプロパティーデータのみが残されます。
デッドメッセージのロギングを有効にする
デッドメッセージのロギングは、デフォルトでは無効になっています。デッドメッセージのロギングを有効にすると、ブローカが次のイベントを記録するようになります。
次のコマンドでは、デッドメッセージのロギングを有効にしています。
デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理的送信先に適用されます。物理的送信先の個々については、ロギングを有効または無効に設定できません。