第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>

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

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>
            <page-size-bytes>10485760</page-size-bytes>
            <address-full-policy>PAGE</address-full-policy>
            ...
        </address-setting>
    </address-settings>
    max-size-bytes
    ブローカーが address-full-policy に指定されたポリシーを実行する前に、アドレスに許可されるメモリーの最大サイズ ( バイト単位 )。デフォルト値は -1 で、制限なしを意味します。指定する値は、K、MB、GB などのバイト表記もサポートします。
    page-size-bytes
    ページングシステムで使用される各ページファイルのサイズ ( バイト単位 )。デフォルト値は 10485760 ( つまり 10 MiB ) です。指定する値は、K、MB、GB などのバイト表記もサポートします。
    address-full-policy

    アドレスの最大サイズに達したときにブローカーが取るアクション。デフォルト値は PAGE です。有効な値は以下のとおりです。

    PAGE
    ブローカーは、追加のメッセージをディスクにページングします。
    DROP
    ブローカーは追加のメッセージを通知せずに破棄します。
    FAIL
    ブローカーは、クライアントメッセージプロデューサーに対して追加のメッセージおよび例外をドロップします。
    BLOCK
    追加のメッセージを送信しようとすると、クライアントメッセージプロデューサーがブロックされます。

    前述の例に示されて いない 追加のページング設定要素は以下のとおりです。

    page-max-cache-size
    ページングナビゲーション中に IO を最適化するためにブローカーがメモリーに保持するページファイルの数。デフォルト値は 5 です。
    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
    2. Windows の場合:

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

    <configuration>
      <core>
        ...
        <global-max-size>1GB</global-max-size>
        ...
      </core>
    </configuration>
    global-max-size

    ブローカーがすべてのアドレスに使用できるメモリーの合計量 ( バイト単位 )。この制限に達すると、受信メッセージに関連付けられたアドレスに対して、ブローカーは address-full-policy の値として指定されたポリシーを実行します。global-max-size のデフォルト値は、ブローカーをホストする Java 仮想マシン (JVM) で利用可能な最大メモリーの半分です。

    global-max-size の値はバイト単位ですが、バイト表記にも対応します ( 例 : "K"、"Mb"、"GB")。

    上記の例では、ブローカーはメッセージの処理時に利用可能な最大 1 ギガバイトのメモリーを使用するように設定されています。

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

    1. Linux の場合:

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

      <broker_instance_dir>\bin\artemis-service.exe start

7.1.4. ページング時のディスク使用量の制限

ブローカーが受信メッセージをページングせずにブロックする前に、ブローカーが使用可能な物理ディスク領域の量を制限できます。

以下の手順では、ページング中にディスク使用量の制限を設定する方法を説明します。

手順

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

    1. Linux の場合:

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

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

    <configuration>
      <core>
        ...
        <max-disk-usage>50</max-disk-usage>
        ...
      </core>
    </configuration>
    max-disk-usage

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

    上記の例では、ブローカーはメッセージをページングする際にディスク領域の fifty パーセントの使用に制限されます。

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

    1. Linux の場合:

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

      <broker_instance_dir>\bin\artemis-service.exe start
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.