第7章 アドレスのメモリー使用量の設定


AMQ Broker は、ブローカーをホストするマシンが制限されたメモリーで実行されている場合でも、数百万のメッセージが含まれる膨大なキューを透過的にサポートします。

このような状況では、すべてのキューを 1 度にメモリーに保存できない可能性があります。超過したメモリー消費から保護するため、ブローカーの各アドレスに許可される最大メモリー使用量を設定できます。さらに、アドレスのメモリー使用量が設定された制限に達したときに、次のいずれかのアクションを実行するようにブローカーを設定できます。

  • メッセージをページ化
  • メッセージを通知せずに破棄
  • メッセージを破棄および送信クライアントへ通知
  • クライアントのメッセージ送信をブロック

アドレスの最大メモリー使用量に達したときにメッセージをページングするようにブローカーを設定する場合、特定のアドレスの制限を次のように設定できます。

  • 受信メッセージのページングに使用されるディスク容量を制限する
  • クライアントがメッセージを消費する準備ができたときに、ブローカーがディスクからメモリーに転送するページングされたメッセージに使用されるメモリーを制限します。

また、ディスク使用量のしきい値を設定して、設定されているすべてのページング制限をオーバーライドすることもできます。ディスク使用量のしきい値に達すると、ブローカーはページングを停止し、すべての受信メッセージをブロックします。

重要

トランザクションを使用すると、ブローカーはトランザクションの一貫性を確保するために追加のメモリーを割り当てる可能性があります。この場合、ブローカーによって報告されるメモリー使用量は、メモリーで使用される合計バイト数を反映しない可能性があります。そのため、指定された最大メモリー使用量に基づいてメッセージをページ化、破棄、またはブロックするようにブローカーを設定する場合、トランザクションも使用しないでください。

7.1. メッセージのページングの設定

最大メモリー使用量制限が指定されたアドレスに対して、使用量制限に達した際にブローカーが実行するアクションを指定することもできます。設定可能なオプションの 1 つが ページング です。

ページングオプションを設定する場合は、アドレスの最大サイズに達すると、ブローカーは、ディスク上のそのアドレスのメッセージを、ページファイル と呼ばれるファイルに保存します。各ページファイルには設定可能な最大サイズがあります。この方法で設定する各アドレスには、ページ化されたメッセージを格納するためにファイルシステム内に専用のフォルダーがあります。

キューのメッセージを検査する際に、キューブラウザーとコンシューマーの両方がページファイルに移動できます。ただし、非常に特殊なフィルターを使用しているコンシューマーは、キュー内の既存のメッセージが最初に消費されるまで、ページファイルに保存されているメッセージを消費できない可能性があります。たとえば、コンシューマーフィルターに "color='red'" などの文字列式が含まれているとします。この条件を満たすメッセージがプロパティー "color='blue'" の 100 万メッセージに従う場合、コンシューマーは "color='blue'" のメッセージが最初に消費されるまで、メッセージを消費できません。

ブローカーは、クライアントが消費する準備ができたときに、ディスクからメモリーにメッセージを転送 ( 非ページ化 ) します。ファイルのすべてのメッセージが確認されると、ブローカーはディスクからページファイルを削除します。

以下の手順は、メッセージのページングを設定する方法を示しています。

7.1.1. ページングディレクトリーの指定

以下の手順では、ページングディレクトリーの場所を指定する方法を説明します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. core 要素内に paging-directory 要素を追加します。ファイルシステムのページングディレクトリーの場所を指定します。

    <configuration ...>
      <core ...>
        ...
        <paging-directory>/path/to/paging-directory</paging-directory>
        ...
      </core>
    </configuration>
    Copy to Clipboard

    その後ページング用に設定するアドレスごとに、ブローカーは指定したページングディレクトリーに専用のディレクトリーを追加します。

7.1.2. ページングのアドレスの設定

以下の手順では、ページング用のアドレスを設定する方法を説明します。

前提条件

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 一致するアドレスまたはアドレス セット 用に設定した address-setting 要素の場合は、設定要素を追加して最大メモリー使用量を指定し、ページング動作を定義します。以下に例を示します。

    <address-settings>
        <address-setting match="my.paged.address">
            ...
            <max-size-bytes>104857600</max-size-bytes>
            <max-size-messages>20000</max-size-messages>
            <page-size-bytes>10485760</page-size-bytes>
            <address-full-policy>PAGE</address-full-policy>
            ...
        </address-setting>
    </address-settings>
    Copy to Clipboard
    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-typebroker.xml 設定ファイルで ASYNCIO に設定されている場合 )、デフォルト値は 3333333 です。標準の Java NIO ジャーナルを使用している場合 ( journal-typeNIO に設定されている場合 )、デフォルト値は journal-buffer-timeout パラメーターの設定済みの値です。

前述の例では、my.paged.address アドレスに送信されたメッセージがメモリーの 104857600 バイトを超えると、ブローカーはページングを開始します。

注記

address-setting 要素で max-size-bytes を指定すると、一致する アドレスに値が適用されます。この値を指定すると、一致するすべてのアドレスの 合計 サイズが max-size-bytes の値に制限されるわけでは ありません

7.1.3. グローバルページングサイズの設定

たとえば、ブローカーで使用パターンが異なるアドレスを多数管理する場合など、アドレスごと のメモリー制限の設定は実用的ではない場合があります。このような状況では、グローバルメモリー制限を指定できます。グローバル制限は、ブローカーがすべてのアドレスに使用できるメモリーの 合計 量です。このメモリー制限に達すると、ブローカーは、新しい各受信メッセージに関連付けられたアドレスの address-full-policy 属性に指定されたアクションを実行します。

以下の手順では、グローバルページングサイズを設定する方法を説明します。

前提条件

手順

  1. ブローカーを停止します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis stop
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe stop
      Copy to Clipboard
  2. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  3. core 要素内に global-max-size 要素を追加し、値を指定します。以下に例を示します。

    <configuration>
      <core>
        ...
        <global-max-size>1GB</global-max-size>
        <global-max-messages>900000</global-max-messages>
        ...
      </core>
    </configuration>
    Copy to Clipboard
    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 属性に指定されたアクションを実行します。

  4. ブローカーを起動します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis run
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe start
      Copy to Clipboard

7.1.4. 特定のアドレスのページング中のディスク使用量を制限する

ブローカーが個々のアドレスまたはアドレスのセットに対する受信メッセージのページングを停止する前に、ブローカーが使用できるディスク領域の量を制限できます。

手順

  1. ブローカーを停止します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis stop
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe stop
      Copy to Clipboard
  2. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  3. core 要素内に属性を追加して、ディスク使用量またはメッセージ数、あるいはその両方に基づいてページング制限を指定し、いずれかの制限に達した場合に実行するアクションを指定します。以下に例を示します。

    <address-settings>
       <address-setting match="match="my.paged.address"">
        ...
        <page-limit-bytes>10G</page-limit-bytes>
        <page-limit-messages>1000000</page-limit-messages>
        <page-full-policy>FAIL</page-full-policy>
        ...
       </address-setting>
    </address-settings>
    Copy to Clipboard
    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 アドレスのメッセージをページングします。

  4. ブローカーを起動します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis run
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe start
      Copy to Clipboard

7.1.5. ページングされたメッセージのメモリーへのフローの制御

AMQ Broker がメッセージをディスクにページングするように設定されている場合、ブローカーはページングされたメッセージを読み取り、クライアントがメッセージを消費する準備ができたときにメッセージをメモリーに転送します。メッセージが過剰なメモリーを消費しないように、ブローカーがディスクからメモリーに転送するメッセージの各アドレスで使用されるメモリーを制限できます。

重要

クライアントアプリケーションが、完了通知待ちのメッセージをあまりにも多く残す場合、ブローカーは保留中のメッセージが承認されるまでページングされたメッセージを読み取らないため、ブローカー上でメッセージ枯渇が発生する可能性があります。

たとえば、ページングされたメッセージのメモリーへの転送の制限 (デフォルトでは 20MB) に達すると、ブローカーはそれ以上のメッセージを読み取る前にクライアントからの確認応答を待ちます。同時に、クライアントがブローカーに確認応答を送信する前に十分なメッセージの受信を待機している場合 (クライアントが使用するバッチサイズによって決まります)、ブローカーはメッセージが不足します。

枯渇を回避するには、メモリーへのページングメッセージの転送を制御するブローカーの制限を増やすか、配信メッセージの数を減らします。クライアントがメッセージ確認応答をより早くコミットするか、タイムアウトを使用してブローカーからメッセージを受信しなくなったときに確認応答をコミットするようにすることで、配信メッセージの数を減らすことができます。

配信メッセージの数とサイズは、AMQ 管理コンソールのキューの Delivering Count メトリクスと Delivering Bytes メトリクスで確認できます。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 一致するアドレスまたはアドレスのセットに対して設定した address-settings 要素については、ページングされたメッセージのメモリーへの転送に対する制限を指定します。以下に例を示します。
address-settings>
    <address-setting match="my.paged.address">
        ...
        <max-read-page-messages>104857600</max-read-page-messages>
        <max-read-page-bytes>20MB</max-read-page-bytes>
        ...
    </address-setting>
</address-settings>
Copy to Clipboard

Max-read-page-messages ブローカーがアドレスごとにディスクからメモリーに読み取ることができるページングメッセージの最大数。デフォルト値は -1 で、制限が適用されないことを意味します。

Max-read-page-bytes ブローカーがアドレスごとにディスクからメモリーに読み取ることができるページングメッセージの最大サイズ (バイト単位)。デフォルト値は 20MB です。

注記

max-read-page-messages 属性と max-read-page-bytes 属性の両方に制限を指定した場合、いずれかの制限に達すると、ブローカーはメッセージの読み取りを停止します。

7.1.6. ディスク使用量のしきい値の設定

ディスク使用量のしきい値を設定できます。しきい値に達すると、ブローカーはページングを停止し、すべての受信メッセージをブロックします。

手順

  1. ブローカーを停止します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis stop
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe stop
      Copy to Clipboard
  2. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  3. core 要素内に max-disk-usage 設定要素を追加し、値を指定します。以下に例を示します。

    <configuration>
      <core>
        ...
        <max-disk-usage>80</max-disk-usage>
        ...
      </core>
    </configuration>
    Copy to Clipboard
    max-disk-usage

    ブローカーが使用できる利用可能なディスク領域の最大パーセンテージ。この制限に達すると、ブローカーは受信メッセージをブロックします。デフォルト値は 90 です。

    前述の例では、ブローカーは利用可能なディスク領域の 80 パーセントの使用に制限されています。

  4. ブローカーを起動します。

    1. Linux の場合:

      <broker_instance_dir>/bin/artemis run
      Copy to Clipboard
    2. Windows の場合:

      <broker_instance_dir>\bin\artemis-service.exe start
      Copy to Clipboard
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat