24.1 メモリー管理

グラフ・サーバー(PGX)では、グラフ・データを格納するためにオンヒープとオフヒープの両方のメモリーが必要です。

グラフ・データのメモリーの割当ては次のとおりです。

  • グラフ索引とグラフ・トポロジはオフヒープに格納されます。
  • すべてのプリミティブ・プロパティ(integer、long、double、float、boolean、date、local_date、timestamp、time、point2d)はオフヒープに格納されます。
  • 文字列プロパティはオンヒープに格納されます。

メモリー制限のデフォルト構成

オンヒープとオフヒープの両方のメモリー制限を構成できます。オンヒープについては、最大値を明示的に設定しなかった場合、デフォルトは、Java Hotspotによって決定された最大オンヒープ・サイズであり、これは、使用可能な物理メモリーの合計量などの様々な要素に基づきます。

max_on_heap_memory_usage_ratio構成フィールドを設定して、グラフ・サーバー(PGX)が使用できるJAVAヒープ・メモリーの合計の比率を決定できます(たとえば、0.8の値は、グラフ・サーバー(PGX)がJAVAヒープ・メモリーの80%を使用できることを意味します)。このパラメータのデフォルト値は1.0で、JVMはメモリー不足エラーを処理できます。サーバーの速度が低下したりクラッシュしたりする可能性があるため、このパラメータを0.9に設定して、グラフ・サーバー(PGX)がヒープ・メモリー上で全部を使用されないようにすることをお薦めします。

オフヒープについては、最大値を明示的に設定しなかった場合、デフォルトは、マシン上の使用可能な物理メモリーの合計量です。

24.1.1 オンヒープ制限の構成

グラフ・サーバー(PGX)のオンヒープ・メモリー制限を構成するには、PGXサービスのsystemd構成ファイルを更新します。ただし、次回グラフ・サーバー(PGX)をアップグレードするときに、構成ファイルの更新が失われるリスクがあります。このため、ドロップイン・ファイルにオンヒープ・メモリー構成を指定することをお薦めします。ドロップイン・ファイルのディレクティブはすべて、グラフ・サーバー(PGX)の起動時にメイン構成ファイル(/etc/systemd/system/pgx.service)のディレクティブと動的にマージされます。

ノート:

グラフ・サーバー(PGX)は、オンヒープ・メモリー・サイズを定期的にチェックします。メモリー使用量が/etc/oracle/graph/pgx.confファイルのmax_on_heap_memory_usage_ratioフィールドで定義されたしきい値を超えると(デフォルト値は0.9)、グラフ・サーバーは例外をスローし、現在実行中のタスク(メモリーを割り当てることができない)を取り消します。これにより、ヒープ・メモリーがいっぱいになると、予期しないサーバー・クラッシュが発生する可能性がなくなります。ヒープ・メモリー割当て用の安全なバッファを確保するために、使用されているオンヒープ・メモリー値がJVMの-Xmx値より小さくなるように、max_on_heap_memory_usage_ratioオプションを1未満に構成することをお薦めします。

次のステップを実行して、ドロップイン・ファイルを作成し、オンヒープ・メモリー・サイズを構成できます。

  1. /etc/systemd/system/pgx.service.dディレクトリにナビゲートします。pgx.service.dディレクトリがファイル・パスに存在しない場合は作成します。
  2. /etc/systemd/system/pgx.service.dに任意の名前でドロップイン・ファイル(.confファイル)を作成します。すでに存在する場合は、このステップをスキップします。
  3. 次のように、rootユーザーとして、またはsudoコマンドを使用してドロップイン・ファイルを編集し、[Service]セクションでオンヒープ・メモリー・オプションを追加します。
    sudo vi /etc/systemd/system/pgx.service.d/setup.conf

    次の例では、setup.confファイルに追加されたオンヒープ・メモリー設定を示します。

    [Service]
    # Java on-heap memory setting
    Environment="JAVA_TOOL_OPTIONS=-Xms1G -Xmx2G"

    このオプションでは、初期ヒープ領域を1GBに設定し、最大2GBまで拡張できます。

    オンヒープ・メモリーを構成するためにサポートされているオプションは、次のとおりです。

    • -Xmx: JVMの最大オンヒープ・サイズを設定します。
    • -Xms: JVMの初期オンヒープ・サイズを設定します。
    • -XX:NewSize: 若い世代の初期サイズを設定します
    • -XX:MaxNewSize: 若い世代の最大サイズを設定します

    これらのオプションの詳細は、javaコマンドのドキュメントを参照してください。

  4. JAVA_HOME環境変数を追加して、グラフ・サーバー(PGX)が適切なJDKを使用するようにします。
    [Service]
    # JAVA_HOME variable
    Environment=JAVA_HOME=/usr/java/jdk-15.0.1/
    # Java on-heap memory setting
    Environment="JAVA_TOOL_OPTIONS=-Xms1G -Xmx2G"

    コメントは#で始まり、構成をテストするために、必要に応じて特定のオプションにコメントを付けることができます。

  5. 次のコマンドを実行して、更新後の設定を使用するようにPGXサービスをリロードします。

    sudo systemctl daemon-reload

  6. グラフ・サーバー(PGX)を再起動します。

    sudo systemctl restart pgx

  7. 新しいメモリー設定でサービスが再起動したことを確認します。

    systemctl status pgx

    次のような出力が表示されます。

    ● pgx.service - Oracle Graph In-Memory Server
       Loaded: loaded (/etc/systemd/system/pgx.service; enabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/pgx.service.d
               └─setup.conf
       Active: active (running) since Wed 2023-04-12 14:50:49 CEST; 5 days ago
     Main PID: 1209 (bash)
       CGroup: /system.slice/pgx.service
               ├─1209 /bin/bash start-server
               └─1469 /usr/java/jdk-11.0.6/bin/java -Dlogback.configurationFile=/etc/oracle/graph/logback-server.xml 
                        -Doracle.jdbc.fanEnabled=false -cp /opt/oracle/graph/pgx/bin/../../pgx/server/lib/activatio...

    前の出力で強調表示されているDrop-Inユニット・ファイルを確認します。これにより、systemdがドロップイン・ファイルを検出し、必要なカスタマイズを適用したことを確認できます。

  8. 最後に、サーバーの状態のRESTエンドポイントを使用して、新しいメモリー使用量を確定します。たとえば:
    BASE_URL=https://localhost:7007
    USERNAME=graph
    PASSWORD=graph
    PGX_RESPONSE=`curl -s -k -X POST -H 'Content-Type: application/json' -d '{"username": "'"${USERNAME}"'", "password": "'"${PASSWORD}"'"}' ${BASE_URL}/auth/token`
    PGX_ACCESS_TOKEN=`echo $PGX_RESPONSE | jq -r '.access_token'`
    curl -s -k -H 'Authorization: Bearer '"${PGX_ACCESS_TOKEN}" $BASE_URL/control/v1/serverState|jq '.entity.memory'

    前述の例では、jqツールを使用して出力をフェッチし、書式設定しています。

24.1.2 オフヒープ制限の構成

グラフ・サーバー(PGX)構成のmax_off_heap_sizeフィールドを設定して、オフヒープ制限を指定できます。max_off_heap_sizeパラメータの詳細は、グラフ・サーバー(PGX)エンジンの構成パラメータを参照してください。端数処理および同期のトレードオフのため、オフヒープ制限を超えないことは保証されていません。