第7章 アドレスのメモリー使用量の設定
AMQ Broker は、ブローカーをホストするマシンが制限されたメモリーで実行されている場合でも、数百万のメッセージが含まれる膨大なキューを透過的にサポートします。
このような状況では、すべてのキューを 1 度にメモリーに保存できない可能性があります。超過したメモリー消費から保護するため、ブローカーの各アドレスに許可される最大メモリー使用量を設定できます。さらに、アドレスのメモリー使用量が設定された制限に達したときに、次のいずれかのアクションを実行するようにブローカーを設定できます。
- メッセージをページ化
- メッセージを通知せずに破棄
- メッセージを破棄および送信クライアントへ通知
- クライアントのメッセージ送信をブロック
アドレスの最大メモリー使用量に達したときにメッセージをページングするようにブローカーを設定する場合、特定のアドレスの制限を次のように設定できます。
- 受信メッセージのページングに使用されるディスク容量を制限する
- クライアントがメッセージを消費する準備ができたときに、ブローカーがディスクからメモリーに転送するページングされたメッセージに使用されるメモリーを制限します。
また、ディスク使用量のしきい値を設定して、設定されているすべてのページング制限をオーバーライドすることもできます。ディスク使用量のしきい値に達すると、ブローカーはページングを停止し、すべての受信メッセージをブロックします。
トランザクションを使用すると、ブローカーはトランザクションの一貫性を確保するために追加のメモリーを割り当てる可能性があります。この場合、ブローカーによって報告されるメモリー使用量は、メモリーで使用される合計バイト数を反映しない可能性があります。そのため、指定された最大メモリー使用量に基づいてメッセージをページ化、破棄、またはブロックするようにブローカーを設定する場合、トランザクションも使用しないでください。
7.1. メッセージのページングの設定 リンクのコピーリンクがクリップボードにコピーされました!
最大メモリー使用量制限が指定されたアドレスに対して、使用量制限に達した際にブローカーが実行するアクションを指定することもできます。設定可能なオプションの 1 つが ページング です。
ページングオプションを設定する場合は、アドレスの最大サイズに達すると、ブローカーは、ディスク上のそのアドレスのメッセージを、ページファイル と呼ばれるファイルに保存します。各ページファイルには設定可能な最大サイズがあります。この方法で設定する各アドレスには、ページ化されたメッセージを格納するためにファイルシステム内に専用のフォルダーがあります。
キューのメッセージを検査する際に、キューブラウザーとコンシューマーの両方がページファイルに移動できます。ただし、非常に特殊なフィルターを使用しているコンシューマーは、キュー内の既存のメッセージが最初に消費されるまで、ページファイルに保存されているメッセージを消費できない可能性があります。たとえば、コンシューマーフィルターに "color='red'" などの文字列式が含まれているとします。この条件を満たすメッセージがプロパティー "color='blue'" の 100 万メッセージに従う場合、コンシューマーは "color='blue'" のメッセージが最初に消費されるまで、メッセージを消費できません。
ブローカーは、クライアントが消費する準備ができたときに、ディスクからメモリーにメッセージを転送 ( 非ページ化 ) します。ファイルのすべてのメッセージが確認されると、ブローカーはディスクからページファイルを削除します。
AMQ Broker は、キュー内の保留中のメッセージを JMS メッセージの優先度に従って順序付けます。ただし、ページングされたメッセージには、優先順位はつけられません。順序を保持する場合は、ページングを設定せず、ブローカーのサイズを十分に設定して、すべてのメッセージをメモリー内に保持できるようにします。
7.1.1. ページングディレクトリーの指定 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順では、ページングディレクトリーの場所を指定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 core要素内にpaging-directory要素を追加します。ファイルシステムのページングディレクトリーの場所を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow その後ページング用に設定するアドレスごとに、ブローカーは指定したページングディレクトリーに専用のディレクトリーを追加します。
7.1.2. ページングのアドレスの設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順では、ページング用のアドレスを設定する方法を説明します。
前提条件
- アドレスおよびアドレス設定の設定方法を理解している。詳細は、4章アドレスおよびキューの設定 を参照してください。
手順
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 一致するアドレスまたはアドレス セット 用に設定した
address-setting要素の場合は、設定要素を追加して最大メモリー使用量を指定し、ページング動作を定義します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow max-size-bytes-
ブローカーが
address-full-policy属性に指定されたアクションを実行する前に、アドレスに許可されるメモリーの最大サイズ (バイト単位)。デフォルト値は-1で、制限がないことを意味します。指定する値は、"K"、"MB"、および "GB" などのバイト表記もサポートします。 max-size-messages-
ブローカーが
address-full-policy属性に指定されたアクションを実行する前に、アドレスに許可されるメッセージの最大数。デフォルト値は -1 で、メッセージ制限がないことを意味します。 page-size-bytes-
ページングシステムで使用される各ページファイルのサイズ ( バイト単位 )。デフォルト値は
10485760( つまり 10 MiB ) です。指定する値は、"K"、"MB"、および "GB" などのバイト表記もサポートします。 address-full-policyアドレスの最大サイズに達したときにブローカーが実行するアクション。デフォルト値は
PAGEです。有効な値は以下のとおりです。PAGE- ブローカーは、追加のメッセージをディスクにページングします。
DROP- ブローカーは追加のメッセージを通知せずに破棄します。
FAIL- ブローカーは、クライアントメッセージプロデューサーに対して追加のメッセージおよび例外をドロップします。
BLOCK- 追加のメッセージを送信しようとすると、クライアントメッセージプロデューサーがブロックされます。
max-size-bytes属性とmax-size-message属性に制限を設定した場合、いずれかの制限に達すると、ブローカーはaddress-full-policy属性に指定されたアクションを実行します。前の例の設定では、メモリー内のアドレスのメッセージの合計が 20,000 を超えるか、使用可能なメモリーを 104857600 バイト使用すると、ブローカーはmy.paged.addressアドレスのメッセージのページングを開始します。前述の例に示されて いない 追加のページング設定要素は以下のとおりです。
page-sync-timeout-
定期的なページ同期の間隔 ( ナノ秒単位 )。非同期 IO ジャーナルを使用している場合 ( つまり、
journal-typeがbroker.xml設定ファイルでASYNCIOに設定されている場合 )、デフォルト値は3333333です。標準の Java NIO ジャーナルを使用している場合 (journal-typeがNIOに設定されている場合 )、デフォルト値はjournal-buffer-timeoutパラメーターの設定済みの値です。
前述の例では、my.paged.address アドレスに送信されたメッセージがメモリーの 104857600 バイトを超えると、ブローカーはページングを開始します。
address-setting 要素で max-size-bytes を指定すると、一致する 各 アドレスに値が適用されます。この値を指定すると、一致するすべてのアドレスの 合計 サイズが max-size-bytes の値に制限されるわけでは ありません。
7.1.3. グローバルページングサイズの設定 リンクのコピーリンクがクリップボードにコピーされました!
たとえば、ブローカーで使用パターンが異なるアドレスを多数管理する場合など、アドレスごと のメモリー制限の設定は実用的ではない場合があります。このような状況では、グローバルメモリー制限を指定できます。グローバル制限は、ブローカーがすべてのアドレスに使用できるメモリーの 合計 量です。このメモリー制限に達すると、ブローカーは、新しい各受信メッセージに関連付けられたアドレスの address-full-policy 属性に指定されたアクションを実行します。
以下の手順では、グローバルページングサイズを設定する方法を説明します。
前提条件
- ページングのアドレスの設定方法を理解している必要があります。詳細は、「ページングのアドレスの設定」 を参照してください。
手順
ブローカーを停止します。
Linux の場合:
<broker_instance_dir>/bin/artemis stop
<broker_instance_dir>/bin/artemis stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe stop
<broker_instance_dir>\bin\artemis-service.exe stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 core要素内にglobal-max-size要素を追加し、値を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow global-max-sizeブローカーがすべてのアドレスに使用できるメモリーの合計量 ( バイト単位 )。この制限に達すると、ブローカーは各受信メッセージに関連付けられたアドレスの
address-full-policy属性に指定されたアクションを実行します。global-max-sizeのデフォルト値は、ブローカーをホストする Java 仮想マシン (JVM) で利用可能な最大メモリーの半分です。global-max-sizeの値はバイト単位ですが、バイト表記にも対応します ( 例 : "K"、"Mb"、"GB")。上記の例では、ブローカーはメッセージの処理時に利用可能な最大 1 ギガバイトのメモリーを使用するように設定されています。
global-max-messagesすべてのアドレスに許可されるメッセージの合計数。この制限に達すると、ブローカーは各受信メッセージに関連付けられたアドレスの
address-full-policy属性に指定されたアクションを実行します。デフォルト値は -1 で、メッセージ制限がないことを意味します。global-max-size属性とglobal-max-messages属性に制限を設定した場合、いずれかの制限に達すると、ブローカーはaddress-full-policy属性に指定されたアクションを実行します。前の例の設定では、メモリー内のメッセージ数が 900,000 を超えるか、使用可能なメモリーが 1 GB を使用すると、ブローカはすべてのアドレスに対してメッセージのページングを開始します。注記max-size-bytes属性またはmax-size-message属性を使用して個々のアドレスに設定された制限が、global-max-size属性またはglobal-max-messages属性に設定された制限よりも先に達した場合、ブローカーはそのアドレスのaddress-full-policy属性に指定されたアクションを実行します。
ブローカーを起動します。
Linux の場合:
<broker_instance_dir>/bin/artemis run
<broker_instance_dir>/bin/artemis runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
<broker_instance_dir>\bin\artemis-service.exe startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.4. 特定のアドレスのページング中のディスク使用量を制限する リンクのコピーリンクがクリップボードにコピーされました!
ブローカーが個々のアドレスまたはアドレスのセットに対する受信メッセージのページングを停止する前に、ブローカーが使用できるディスク領域の量を制限できます。
手順
ブローカーを停止します。
Linux の場合:
<broker_instance_dir>/bin/artemis stop
<broker_instance_dir>/bin/artemis stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe stop
<broker_instance_dir>\bin\artemis-service.exe stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 core要素内に属性を追加して、ディスク使用量またはメッセージ数、あるいはその両方に基づいてページング制限を指定し、いずれかの制限に達した場合に実行するアクションを指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow page-limit-bytes-
ブローカーが
page-full-policy属性に指定されたアクションを実行する前に、アドレスの受信メッセージをページングするために許可されるディスク領域の最大サイズ (バイト単位)。指定する値は、"K"、"MB"、および "GB" などのバイト表記をサポートしています。デフォルト値は -1 で、制限がないことを意味します。 page-limit-messages-
ブローカーが
page-full-policy属性に指定されたアクションを実行する前に、アドレスに対してページングできる受信メッセージの最大数。デフォルト値は -1 で、メッセージ制限がないことを意味します。 page-full-policyアドレスが
page-limit-bytes属性またはpage-limit-messages属性で設定された制限に達したときにブローカーが実行するアクション。有効な値は以下のとおりです。DROP ブローカーは、それ以降のメッセージをサイレントにドロップします。
FAIL ブローカーはそれ以上のメッセージを削除し、送信側クライアントに通知します。
前述の例では、ページングで 10GB のディスク領域が使用されるか、合計 100 万個のメッセージがページングされるまで、ブローカーは
my.paged.addressアドレスのメッセージをページングします。
ブローカーを起動します。
Linux の場合:
<broker_instance_dir>/bin/artemis run
<broker_instance_dir>/bin/artemis runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
<broker_instance_dir>\bin\artemis-service.exe startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.5. ページングされたメッセージのメモリーへのフローの制御 リンクのコピーリンクがクリップボードにコピーされました!
AMQ Broker がメッセージをディスクにページングするように設定されている場合、ブローカーはページングされたメッセージを読み取り、クライアントがメッセージを消費する準備ができたときにメッセージをメモリーに転送します。メッセージが過剰なメモリーを消費しないように、ブローカーがディスクからメモリーに転送するメッセージの各アドレスで使用されるメモリーを制限できます。
クライアントアプリケーションが、完了通知待ちのメッセージをあまりにも多く残す場合、ブローカーは保留中のメッセージが承認されるまでページングされたメッセージを読み取らないため、ブローカー上でメッセージ枯渇が発生する可能性があります。
たとえば、ページングされたメッセージのメモリーへの転送の制限 (デフォルトでは 20MB) に達すると、ブローカーはそれ以上のメッセージを読み取る前にクライアントからの確認応答を待ちます。同時に、クライアントがブローカーに確認応答を送信する前に十分なメッセージの受信を待機している場合 (クライアントが使用するバッチサイズによって決まります)、ブローカーはメッセージが不足します。
枯渇を回避するには、メモリーへのページングメッセージの転送を制御するブローカーの制限を増やすか、配信メッセージの数を減らします。クライアントがメッセージ確認応答をより早くコミットするか、タイムアウトを使用してブローカーからメッセージを受信しなくなったときに確認応答をコミットするようにすることで、配信メッセージの数を減らすことができます。
配信メッセージの数とサイズは、AMQ 管理コンソールのキューの Delivering Count メトリクスと Delivering Bytes メトリクスで確認できます。
手順
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 一致するアドレスまたはアドレスのセットに対して設定した
address-settings要素については、ページングされたメッセージのメモリーへの転送に対する制限を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Max-read-page-messagesブローカーがアドレスごとにディスクからメモリーに読み取ることができるページングメッセージの最大数。デフォルト値は -1 で、制限が適用されないことを意味します。Max-read-page-bytesブローカーがアドレスごとにディスクからメモリーに読み取ることができるページングメッセージの最大サイズ (バイト単位)。デフォルト値は 20 MB です。これらの制限を適用すると、ブローカーは、コンシューマーに配信する準備ができているメモリー内のメッセージと、現在配信中のメッセージの両方をカウントします。コンシューマーがメッセージを確認するのが遅い場合、メッセージを配信すると、メモリーまたはメッセージの制限に達し、ブローカーが新しいメッセージをメモリーに読み込めなくなる可能性があります。その結果、ブローカーでメッセージが不足する可能性があります。
コンシューマーがメッセージを確認するのが遅く、現在配信中のメッセージが設定済みの
max-read-page-messagesまたはmax-read-page-bytes制限に達する場合は、現在配信中のメッセージのページングされたメッセージをメモリーに転送する際に適用される別の制限を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow prefetch-page-bytesページングされたメッセージをキューごとにメモリーに読み込むために使用できるメモリー (バイト単位)。デフォルト値は 20 MB です。prefetch-page-messagesブローカーがキューごとにディスクからメモリーに読み込むことができるページングされたメッセージの数。デフォルト値は -1 で、制限が適用されないことを意味します。prefetch-page-bytesまたはprefetch-page-messagesパラメーターの制限を指定して、現在配信中のメッセージで使用されるメモリーの量またはメッセージ数を制限する場合は、max-read-page-bytesまたはmax-read-page-messageパラメーターの制限を高く設定して、新しいメッセージをメモリーに読み込むための容量を確保してください。注記prefetch-page-bytes パラメーターの値よりも前に max-read-page-bytes パラメーターの値に達すると、ブローカーはページングされたメッセージをそれ以上メモリーに読み込まなくなります。
7.1.6. ディスク使用量のしきい値の設定 リンクのコピーリンクがクリップボードにコピーされました!
ディスク使用量のしきい値を設定できます。しきい値に達すると、ブローカーはページングを停止し、すべての受信メッセージをブロックします。
手順
ブローカーを停止します。
Linux の場合:
<broker_instance_dir>/bin/artemis stop
<broker_instance_dir>/bin/artemis stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe stop
<broker_instance_dir>\bin\artemis-service.exe stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
<broker_instance_dir>/etc/broker.xml設定ファイルを開きます。 core要素内にmax-disk-usage設定要素を追加し、値を指定します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow max-disk-usageブローカーが使用できる利用可能なディスク領域の最大パーセンテージ。この制限に達すると、ブローカーは受信メッセージをブロックします。デフォルト値は
90です。前述の例では、ブローカーは利用可能なディスク領域の 80 パーセントの使用に制限されています。
ブローカーを起動します。
Linux の場合:
<broker_instance_dir>/bin/artemis run
<broker_instance_dir>/bin/artemis runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Windows の場合:
<broker_instance_dir>\bin\artemis-service.exe start
<broker_instance_dir>\bin\artemis-service.exe startCopy to Clipboard Copied! Toggle word wrap Toggle overflow