20.1.3.1.1 オンヒープ制限の構成

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

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

  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. 新しいメモリー設定がグラフ・サーバー(PGX)に正しく渡されていることを確認します。
    sudo systemctl show pgx -p Environment
    Environment=PGX_SERVER_KEYSTORE_PASSWORD=changeit JAVA_HOME=/usr/java/jdk-15.0.1/ JAVA_TOOL_OPTIONS=-Xms1G\x20-Xmx2G
  8. 新しいメモリー設定がグラフ・サーバー(PGX)で使用されていることを確認します。
    $ sudo journalctl -u pgx -n 50 | grep JAVA_TOOL_OPTIONS
    Sep 26 10:52:46 localvm.localdomain bash[25206]: Picked up JAVA_TOOL_OPTIONS: -Xms1G -Xmx2G
  9. 最後に、サーバーの状態の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'`
    $ echo `curl -s -k -H 'Authorization: Bearer '"${PGX_ACCESS_TOKEN}" $BASE_URL/control/v1/serverState|jq '.entity.memory'` |jq
    {
      "localvm.localdomain": [
        {
          "free_heap_mb": 830,
          "current_heap_mb": 989,
          "used_heap_mb": 159,
          "maximum_heap_mb": 1979,
          "type": "java_heap"
        },
        {
          "used_off_heap_mb": 0,
          "maximum_off_heap_mb": 1741,
          "current_off_heap_mb": 1741,
          "free_off_heap_mb": 1741,
          "type": "unmanaged"
        }
      ]
    }