目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / ガイド / ワークロードメモリ保護のチューニング
適用項目 SUSE Linux Enterprise Server for SAP Applications 15 SP4

9 ワークロードメモリ保護のチューニング

重要
重要

systemdベースのSAPインスタンスがある場合は、ワークロードメモリ保護を設定する前に9.9項 「systemdベースのSAPインスタンスと通常のSAPインスタンスの両方を実行しているシステム」9.10項 「systemdベースのインスタンスのみを実行しているシステム」を読んでください。

SAPアプリケーションを物理メモリに保持することは、パフォーマンスのために不可欠です。古い製品バージョンでは、ページキャッシュ制限により、ページキャッシュの増加によるディスクへのスワップアウトが防止されていました(SUSE Linux Enterprise Server for SAP Applications 11 SP1以降およびSUSELinux Enterprise Server for SAP Applications 12)。SUSE Linux Enterprise Server for SAP Applications 15では、ページキャッシュ制限がより高度なワークロードメモリ保護に置き換えられました。

ワークロードメモリ保護は、SAPインスタンスを専用のcgroup (v2)に置き、memory.lowパラメータによって、物理メモリに保持するメモリ容量をカーネルに伝えます。これにより、ページキャッシュの増加を含む、そのcgroupの外側のあらゆる形態のメモリ負荷に対してこのcgroup内のプロセスが保護されます。ワークロードメモリ保護は、このcgroup内のメモリ負荷に対して保護することはできません。これは、1つのホスト上の「すべての」インスタンスのメモリをカバーします。

memory.lowの値は、SAPインスタンスとワークロードの種類によって異なり、手動で設定する必要があります。システムが過度な負荷下にある場合、Linuxカーネルはmemory.low値を無視して、OOMキラーをスワップしたり、呼び出したりしてでも、システム全体を安定化させようとします。スワップしたり、OOMキラーを呼び出したりしてでも、システム全体を安定化させようとします。

cgroupに関する詳細については、https://documentation.suse.com/sles-15/html/SLES-all/cha-tuning-cgroups.htmlを参照してください。

9.1 アーキテクチャ

WMPは次の3つのコンポーネントに依存します。

cgroup2メモリコントローラ(Linuxカーネル)

cgroup2メモリコントローラパラメータmemory.lowを使用すると、Linuxカーメルが物理メモリに保持するメモリ容量を定義できます。このメモリ容量は、システム全体が重大なメモリ状況にある場合を除いて、再利用プロセスから除外されます。

WMPはmemory.lowを使用して、SAPプロセスからのメモリがページングされたり、ディスクにスワップアウトされたりしないようにします。メモリコントローラを除いて、cgroup1コントローラは引き続き利用できますが、マウントされなくなりました。

systemd

systemdでは、cgroup階層を作成および維持するためのインフラストラクチャを提供し、cgroupパラメータの設定を可能にします。Systemdでは、cgroup階層を作成および維持するためのインフラストラクチャが提供され、cgroupパラメータの設定を可能にします。WMPではsystemd設定ファイルを提供し、systemdメソッドを介して、memory.lowを簡単に設定できるようにします。

SAP Start Service

SAP Start Serviceは、SAPインスタンスの開始と停止を管理します。WMPの重要な機能は、インスタンス自体がインスタンスプロファイルで開始される前の、プログラムの設定可能な実行にあります。WMPでは、このメソッドを使用してプログラムを呼び出し、sapstartプロセスを指定のcgroupに移動させるため、SAPインスタンスがそのcgroup内で開始されます。

9.2 ワークロードメモリ保護のサポート

WMPは、

  • App Server (SAP NetWeaver、SAP S/4HANA)や

  • SAP HANA 1.0/2.0など1台のホスト上にある1台以上のSAPシステム用AMD64/Intel 64およびPOWER上のSUSE Linux Enterprise Server for SAP Applications 15 SP4でサポートされています。

ワークロードメモリ保護は、SAP HANA以外のデータベースには適用されません。開始メソッドによって、プロセスが専用のcgroup内部または外部で実行される場合があります。内部で実行される場合、memory.lowを決定する際にメモリ消費量を考慮する必要があります。

重要
重要: WMPの制限

WMPを使用することはメリットがありますが、いくつかの制限事項に注意する必要があります。

  • WMPは専用のcgroup内部のメモリ負荷に対して保護できません。

  • WMPはSAPシステムまたはそのインスタンスを相互に保護できません。すべてのSAPプロセスは同じメモリ制限を共有します。複数のSAPシステム(SAP NetWeaverやSAP S/4HANA)がある場合、WMPは1つのSAPアプリケーションを別のSAPアプリケーションから保護できません。

  • SUSEのHAクラスタソリューションのサポートはまだ使用できません。

9.3 ワークロードメモリ保護の設定

9.3.1 ワークロードメモリ保護の準備

  1. SAPソフトウェア(SAP HANA、SAP NetWeaverなど)がインストールされているか確認します。グループsapsysは、後でsapwmpのパッケージのインストール中に必要になります。その部分をスキップする場合は、警告メッセージが表示されます(重要: パッケージの順序に注意してくださいを参照)。

  2. SAPシステムの停止:

    # systemctl stop sapinit

    サービスは有効にすることができますが、すべてのSAPプロセスを終了する必要があります。

  3. パッケージ sapwmp:

    > sudo zypper install sapwmp
    重要
    重要: パッケージの順序に注意してください

    次のメッセージは、SAPソフトウェアがシステムにインストールされていない場合にのみ表示されます。

    Warning: sapsys group not found warning: group sapsys does not exist - using root

    パッケージsapwmpを削除し、まずSAPソフトウェアをインストールしてから、再度sapwmpをインストールします。

    別の方法として、SAPソフトウェアをインストールした「後で」次のコマンドを使用して、所有権と許可を修正できます。

    > sudo chgrp sapsys /usr/lib/sapwmp/sapwmp-capture && \
    chmod +s /usr/lib/sapwmp/sapwmp-capture

    次のメッセージは無視して構いません。

    Warning: Found memory controller on v1 hierarchy. Make sure unified hierarchy only is used.

    次の手順で、統合階層への切り替えを実行します。

  4. systemd.unified_cgroup_hierarchy=trueをカーネルコマンドラインに追加するには、次のように/etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTにこれを追加します。

    GRUB_CMDLINE_LINUX_DEFAULT="... systemd.unified_cgroup_hierarchy=true swapaccount=1"

    この変更により、cgroup2コントローラのみが/sys/fs/cgroupにマウントされます。ただし、メモリコントローラを除き、Cgroup1コントローラは、まだ利用可能です。cgroup1を使用するツールは、そのままでは機能せず、設定が必要な場合があります。また、cgroup1に必要なマウント構造を提供する必要があります。

    パラメータswapaccount=1は、WMPが機能するために必要ではありませんが、サポートケースでの分析を支援し、cgroupごとのスワップアウトされたメモリ容量を示します。

  5. GRUB2の設定を再書き込みします。

    > sudo grub2-mkconfig -o /boot/grub2/grub.cfg

    再起動後(後で実行される)、cgroup階層はv2 (統合階層)のみに切り替えられます。

  6. SAP.slice用のMemoryLowを設定します。

    > sudo systemctl set-property SAP.slice MemoryLow=...

    このコマンドは、/etc/systemd/system.control/SAP.slice.d/にドロップインを作成し、MemoryLowを設定します。

    sapwmpパッケージには、SAPインスタンスに同じ名前のcgroupを作成するsystemd設定SAP.sliceが含まれます。MemoryLowsystemdは、最初に述べたcgroupパラメータmemory.lowと等価です。MemoryLowの値は、SAPアプリケーションおよびワークロードのタイプによって異なります。

    SAP HANAの場合

    SAP HANAにはグローバル割り当て制限があるため、その値を直接使用できます。

    SAPアプリケーションサーバ(SAP NetWeaver、SAP S/4HANA)

    アプリケーションサーバの場合、ワークロードのサイジングはMemoryLowの値を示す必要があります。sapwmpパッケージには、MemoryLowを決定するために役立つ可能性がある監視パートが含まれます。9.6項 「メモリ使用量の監視」を参照してください。

    次の点に注意してください。

    • 1台のホスト上のすべてのSAPインスタンスは、SAP.slice内に存在します。MemoryLowは、そのホスト上の「すべての」インスタンスのメモリ容量をカバーする必要があります。SAPシステムまたはそのインスタンスを相互に保護することはできません。

    • SAP HANA以外のデータベースを使用している場合、一部のデータベースプロセスがSAP.sliceに含まれている可能性があります。MemoryLow値を決定する際には、これらのメモリ消費量を考慮する必要があります。

    • MemoryLowの値は、物理メモリの値に非常に近い値、またはこれらの値より大きな値にしないでください。システムサービスおよび追加のインストール済みソフトウェアにもメモリが必要です。SAPアプリケーションを犠牲にしてスワップを広範囲に使用しなければならない場合、システムが応答しなくなる可能性があります。

    注記
    注記: MemoryLow値を正しく計算する

    MemoryLowは、メモリサイズをバイト単位で取得します。値の末尾にK、M、G、Tが付いている場合、指定されたメモリサイズはそれぞれ、キビバイト、メビバイト、ギビバイト、またはテビバイトとして解析されます(1000ではなく、1024をベースとしている場合は、https://en.wikipedia.org/wiki/Binary_prefixを参照)。または、パーセンテージ値が指定される場合があります。この場合、システムにインストールされている物理メモリを基準として取得されます。

    基礎となるcgroupメモリコントローラは、値をページサイズの倍数に切り上げます。混乱を避けるため、MemoryLowの値をページサイズの倍数に設定してください。

  7. 各SAPインスタンスプロファイルのバックアップを作成します。プロファイルのエラーはSAPシステムの起動を妨げる可能性があります。

  8. SAPインスタンスごとに、次の行を最後のExecute_行の後のインスタンスプロファイル(通常は/usr/sap/SID/SYS/profile/にある)に追加します。

    Execute_20 = local /usr/lib/sapwmp/sapwmp-capture -a

    必要に応じて、Executeステートメントの数を増やして最も高いものにし、その行が最後に実行されるようにします。

    重要
    重要: インスタンスプロファイルの編集

    SAP GUI (トランザクションRZ11)によって管理するためにデータベースにプロファイルをインポートしていない場合「にのみ」インスタンスプロファイルを直接編集します。これらのプロファイルをインポートしている場合は、SAP GUIを使用して、行を追加してください。ファイルシステムにあるプロファイルファイルは上書きされ、手動の変更は失われます。

これでシステムが再起動する準備が整いました。

9.3.2 再起動と確認

  1. システムを再起動します。

  2. 再起動後に、cgroups v2が実際に使用されていることを確認します。

    # grep  cgroup /proc/mounts
    cgroup /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0
  3. cgroupが正常に作成され、低いメモリ値が設定されていることを確認します。

    > systemctl show -p MemoryLow SAP.slice
    MemoryLow=18487889920    <- Should be your chosen value (always in bytes)!
    
    # cat /sys/fs/cgroup/SAP.slice/memory.low
    18487889920    <- Should be your chosen value!

    変数MemoryLowは任意の値に設定できますが、変数のコンテンツは常にページサイズの倍数になります。これらの値にわずかに違いがあることに気づく場合には、このことに注意してください。

  4. すべてのSAPインスタンスプロセスが正しいシステムのスライス/cgroup内にあることを確認します。

    sapinit.serviceを有効にしていない場合は、今すぐサービスを開始してください。自動開始がインスタンスプロファイルで有効になっていない場合は、確認する前にインスタンスを開始します。

    例:

    # systemd-cgls -a /sys/fs/cgroup/SAP.slice
    Directory /sys/fs/cgroup/SAP.slice:
    |-wmp-rd91fd6b3ca0d4c1183659ef4f9a092fa.scope
    | |-3349 sapstart pf=/usr/sap/HA0/ERS10/profile/HA0_ERS10_sapha0er
    | `-3375 er.sapHA0_ERS10 pf=/usr/sap/HA0/ERS10/profile/HA0_ERS10_sapha0er N...
    |-wmp-r360ebfe09bcd4df4873ef69898576199.scope
    | |-3572 sapstart pf=/usr/sap/HA0/SYS/profile/HA0_D01_sapha0ci
    | |-3624 dw.sapHA0_D01 pf=/usr/sap/HA0/SYS/profile/HA0_D01_sapha0ci
    ...

    インスタンスのsapstartsrvプロセスは、常にSIDadmのユーザスライスに残ります。sapstartプロセスとその子のみがターゲットcgroupに移動されます。

    インスタンスごとに、このインスタンスのすべてのプロセスを含むディレクトリwmp-rSCOPEID.scopeが存在します。SCOPEIDは16進数のランダムな128ビット値です。

    SAP HostAgentは、WMPではカバーされておらず、一部はsapinit.sliceに残り、一部はsapadmのユーザスライスに残ります。

  5. プロセスがcgroup内にない場合は、インスタンスプロファイルのExecute行が正しいかどうか確認します。また、各インスタンスの開始が、システムログ/var/log/messagesに記録されます。

    ...
    2020-06-16T18:41:28.317233+02:00 server-03 sapwmp-capture: Found PIDs:
    2020-06-16T18:41:28.317624+02:00 server-03 sapwmp-capture:      17001
    2020-06-16T18:41:28.317813+02:00 server-03 sapwmp-capture:      16994
    2020-06-16T18:41:28.317959+02:00 server-03 sapwmp-capture:      16551
    2020-06-16T18:41:28.319423+02:00 server-03 sapwmp-capture: Successful capture into SAP.slice/wmp-r07a27e12d7f2491f8ccb9aeb0e080aaa.scope
    2020-06-16T18:41:28.319672+02:00 server-03 systemd[1]: Started wmp-r07a27e12d7f2491f8ccb9aeb0e080aaa.scope.
    ...

正しいセットアップを確認するには、wmp-checkを実行します。スクリプトはワークロードメモリ保護のセットアップを確認します。

  • cgroup2の正しいセットアップ。

  • キャプチャプログラムの所有権と許可。

  • SAPインスタンスプロファイルのWMPエントリ。

  • 実行中のSAPインスタンスプロセスの正しいcgrop。

  • SAP.sliceの正しいセットアップ。

  • MemoryLowの正常な設定。ただし、MemoryLow値が適切に選択されているかどうかを判断することはできません。

  • オプションのメモリサンプラーのセットアップ。

  • オプションのスワップアカウンティングのセットアップ。

SAPインスタンスプロファイルは/usr/sap/SID/SYS/profile/の下にあることを想定しています。

9.4 ワークロードメモリ保護の設定

WMPを設定するには、次のように/etc/sapwmp.confを編集します。

# NOTE: Local changes may be reverted after update of WMP package. Check for
#      .rpmsave file to restore & merge changes.

## Description: Slice unit name where workload is put into
## Type:        string
## Default:     "SAP.slice"
DEFAULT_SLICE="SAP.slice"

## Description: Comma-separated list of command names to which capture is
##              applied (matching against /proc/$PID/stat)
## Type:        string
## Default:     sapstart
PARENT_COMMANDS=sapstart

変更後、すべてのSAPインスタンスを再起動します。

警告
警告

/etc/sapwmp.confを変更する必要はありません。何をしようとしているのかはっきりわかるまで実行しないでください。

9.5 MemoryLowの値の変更

MemoryLowの値を変更するには、次のコマンドを実行します。

# systemctl set-property SAP.slice MemoryLow=...

変更はすぐに有効になります。

基礎となるcgroupメモリコントローラは、値をページサイズの倍数に切り上げます。混乱を避けるため、MemoryLowの値をページサイズの倍数に設定してください。

重要
重要: MemoryLowの値

MemoryLowをすでにSAP.sliceに割り当てられているメモリより小さい値に設定しないでください。確認するには、次のコマンドを実行します。

# systemctl show -p MemoryCurrent SAP.slice

9.6 メモリ使用量の監視

メモリ使用量のログを記録することは、memory.lowの値を決定するためだけでなく、WMPの正しい動作を監視するためにも必要になる場合があります。

監視を有効にするには、付属しているタイマーユニットを有効にします。

# systemctl enable --now wmp-sample-memory.timer

これで、タイマーがsystemctl list-timersによって一覧表示されるはずです。

# systemctl list-timers
NEXT    LEFT       LAST    PASSED  UNIT                     ACTIVATES
...
Tue...  9min left  Tue...  4s ago  wmp-sample-memory.timer  wmp-sample-memory.service
...

現在の設定を確認すると、メモリデータが10分ごとに収集され、3分のランダムな遅延が発生していることがわかります。

# systemctl cat wmp-sample-memory.timer
# /usr/lib/systemd/system/wmp-sample-memory.timer
[Unit]
Description=WMP periodic log of memory consumption

[Timer]
OnCalendar=*:0/10
RandomizedDelaySec=180
AccuracySec=60

[Install]
WantedBy=timers.target

これを変更するには、ドロップインファイルを作成して、systemdを再ロードします(たとえば、間隔を30分に増やします):

# mkdir /etc/systemd/system/wmp-sample-memory.timer.d

# cat <<EOF >/etc/systemd/system/wmp-sample-memory.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=*:0/30
EOF

# systemctl daemon-reload

(以前の定義されたOnCalendar=設定を削除するには、最初のOnCalendar=行が重要です。)

メモリ消費量を確認するには、システムログでwmp_memory_currentで書き込まれた行を確認します。

# grep wmp_memory_current /var/log/messages
...


2020-09-14T12:02:40.337266+02:00 server-03 wmp_memory_current: SAP.slice : memory.low=21474836480 memory.current=2294059008 memory.swap.current=0 , user.slice : memory.low=0 memory.current=5499219968 memory.swap.current=0 , init.scope : memory.low=0 memory.current=8364032 memory.swap.current=0 , system.slice : memory.low=0 memory.current=1863335936 memory.swap.current=0
2020-09-14T12:03:00.767838+02:00 server-03 wmp_memory_current: SAP.slice : memory.low=21474836480 memory.current=2294022144 memory.swap.current=0 , user.slice : memory.low=0 memory.current=5499473920 memory.swap.current=0 , init.scope : memory.low=0 memory.current=8364032 memory.swap.current=0 , system.slice : memory.low=0 memory.current=1862586368 memory.swap.current=0
2020-09-14T12:04:00.337315+02:00 server-03 wmp_memory_current: SAP.slice : memory.low=21474836480 memory.current=2294022144 memory.swap.current=0 , user.slice : memory.low=0 memory.current=5499207680 memory.swap.current=0 , init.scope : memory.low=0 memory.current=8355840 memory.swap.current=0 , system.slice : memory.low=0 memory.current=1862746112 memory.swap.current=0
...

ここによりよい印象を与える再フォーマットされたログ行があります。

2020-09-14T12:02:40.337266+02:00 server-03 wmp_memory_current:
SAP.slice    : memory.low=21474836480 memory.current=2294059008 memory.swap.current=0 ,
user.slice   : memory.low=0           memory.current=5499219968 memory.swap.current=0 ,
init.scope   : memory.low=0           memory.current=8364032    memory.swap.current=0 ,
system.slice : memory.low=0           memory.current=1863335936 memory.swap.current=0

/sys/fs/cgroup/のすぐ下のcgroupごとに、コンマ区切りのブロックが1つ存在します。通常のシステムでは、少なくともuser.slicesystem.slice、およびinit.scopeを見つける必要があります。WMPはSAP.sliceを追加します。

各ブロックには、memory.lowmemory.currentの現在の値、およびこのcgroup内プロセスの物理メモリに現在割り当てられている量に関する情報が含まれています。

セットアップ中にスワップアカウンティング(swapaccount=1)を有効にした場合は、cgroupのスワップアウトされたメモリ容量である、memory.swap.currentもあります。

すべての値はバイト単位です。9.3.1項 「ワークロードメモリ保護の準備」ステップ 6を参照してください。

ヒント
ヒント: 印刷用のスクリプト

テーブルまたはCSVとして情報を出力するスクリプトは次の場所にあります。https://github.com/scmschmidt/wmp_log_extract

9.7 正しい運用の確認

メモリ消費量およびスワッピングの監視(9.6項 「メモリ使用量の監視」を参照)のほか、すべてのSAPインスタンスプロセスがSAP.sliceの下のスコープ内であることも定期的に確認する必要があります。

これを行うには、systemd-cglsを実行し、各インスタンスプロセスを確認します。

例:

# systemd-cgls -a /sys/fs/cgroup/SAP.slice
Directory /sys/fs/cgroup/SAP.slice:
|-wmp-rd91fd6b3ca0d4c1183659ef4f9a092fa.scope
| |-3349 sapstart pf=/usr/sap/HA0/ERS10/profile/HA0_ERS10_sapha0er
| `-3375 er.sapHA0_ERS10 pf=/usr/sap/HA0/ERS10/profile/HA0_ERS10_sapha0er N...
|-wmp-r360ebfe09bcd4df4873ef69898576199.scope
| |-3572 sapstart pf=/usr/sap/HA0/SYS/profile/HA0_D01_sapha0ci
| |-3624 dw.sapHA0_D01 pf=/usr/sap/HA0/SYS/profile/HA0_D01_sapha0ci
...

より簡単なテストで、システムで使用されるすべてのSIDに対するcgroupを含むすべてのプロセスを一覧表示します。

例:

> ps -eo user,pid,cgroup:60,args | grep -e [h]a0adm
ha0adm    2062 0::/user.slice/user-1001.slice/user@1001.service/init.scope  /usr/lib/systemd/systemd --user
ha0adm    2065 0::/user.slice/user-1001.slice/user@1001.service/init.scope  (sd-pam)
ha0adm    3081 0::/SAP.slice/wmp-r73c594e050904c9c922a312dd9a28fd4.scope    sapstart pf=/usr/sap/HA0/SYS/profile/HA0_ASCS00_sapha0as
ha0adm    3133 0::/SAP.slice/wmp-r73c594e050904c9c922a312dd9a28fd4.scope    ms.sapHA0_ASCS00 pf=/usr/sap/HA0/SYS/profile/HA0_ASCS00_sapha0as
ha0adm    3134 0::/SAP.slice/wmp-r73c594e050904c9c922a312dd9a28fd4.scope    en.sapHA0_ASCS00 pf=/usr/sap/HA0/SYS/profile/HA0_ASCS00_sapha0as
ha0adm    3327 0::/SAP.slice/wmp-ra42489517eb846c282c57681e627a496.scope    sapstart pf=/usr/sap/HA0/ERS10/profile/HA0_ERS10_sapha0er
...

sapstartsrvを除くすべてのインスタンスプロセスは0::/SAP.slice/の下のスコープ内にある必要があります。

正しいセットアップを確認するには、wmp-checkツールを使用します。詳しくは「9.3.2項 「再起動と確認」」を参照してください。

9.8 ワークロードメモリ保護のアンインストール

  1. SAPシステムを完全に停止します。sapinit.serviceを停止する必要がありますが、有効なままにしておくことができます。すべてのSAPプロセスを終了する必要があります。

  2. 設定MemoryLowなどのSAP.sliceに行われた変更をすべて削除します。

    # systemctl revert SAP.slice
  3. (オプション) パッケージsapwmpを削除します:

    # zypper remove sapwmp

    このステップはオプションです。パッケージは影響を及ぼすことなくシステムにとどまることができます。

  4. (オプション) /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTからsystemd.unified_cgroup_hierarchy=trueを削除します。

    このステップはオプションです。WMPを使用せずにcgroup2を保持できます。

  5. GRUB2の設定を再書き込みします。

    # grub2-mkconfig -o /boot/grub2/grub.cfg

    次のブート後に、システムはハイブリッドcgroup階層に戻されます。

  6. 各SAPインスタンスプロファイル(通常は/usr/sap/SID/SYS/profile/にある)からsapwmp-captureを呼び出す行を削除します。

    Execute_20 = local /usr/lib/sapwmp/sapwmp-capture -a
    重要
    重要: バックアップが必要

    インスタンスプロファイルを編集する前に、バックアップを作成してください! プロファイルのエラーはSAPシステムの起動を妨げる可能性があります!

    重要
    重要: プロファイルの直接編集について

    SAP GUI (トランザクションRZ11)によって管理するためにデータベースにプロファイルをインポートしていない場合「にのみ」インスタンスプロファイルを直接編集します。これらのプロファイルをインポートしている場合は、SAP GUIを使用して、行を追加してください。ファイルシステムにあるプロファイルファイルは上書きされ、手動の変更は失われます。

  7. システムを再起動して、SAPシステムが正常に起動されていることを確認します。

9.9 systemdベースのSAPインスタンスと通常のSAPインスタンスの両方を実行しているシステム

SAPカーネルバージョン788および特定の指定されたパッチレベルの古いカーネルリリース(722、753、777、781、785)では、SAP Start Serviceはsystemdをサポートしています。このようなsystemdベースのインスタンスには、それ自体のsystemdサービスが付属しています。このサービスを、SAP Start ServiceはSAP.sliceの下のそれ自体のcgroup (SAPSID_NR.service)に配置します。これは、ワークロードメモリ保護の設定に影響します。systemdベースのSAPインスタンスの場合、次の手順が適用されます。

  • キャプチャプログラムをインスタンスプロファイルに追加するステップをスキップします。systemdをサポートするようにインスタンスを移行する場合は、このエントリをプロファイルから削除します。systemdベースのインスタンスは常にSAP.sliceの下のcgroupに入れられるため、ワークロードメモリ保護の一部になることに注意してください。

  • 保護が正しく機能するように、SAPSID_NR.serviceに対してMemoryLow=infinityを設定します。SAPNW1_01.serviceの場合の例:

    sudo systemctl set-property SAPNW1_01.service MemoryLow=infinity
  • 保護が正しく機能するように、saphostagent.serviceに対してMemoryLow=infinityを設定します

    sudo systemctl set-property saphostagent.service MemoryLow=infinity

次の例は、混在環境を示しています。SAPホストエージェントとインスタンス01はsystemdベースですが、インスタンス00は異なります。両方のインスタンスは、SAP.sliceの下の、SAP Start Service (SAPNW1_01.service)またはワークロードメモリ保護(wmp-rece5b7fa372e4619a9623e120aa23a23.scope)によって管理されるcgroup内にあります。SAP.sliceに対してMemoryLow=が設定されており、その下のすべてのcgroupsに対してMemoryLow=infinityが設定されています。

>  systemd-cgls
Control group /:
-.slice
├─SAP.slice 
│ ├─SAPNW1_01.service 
│ │ ├─ 887 /usr/sap/NW1/ASCS01/exe/sapstartsrv pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ ├─2838 sapstart pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ ├─2895 ms.sapNW1_ASCS01 pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ └─2896 en.sapNW1_ASCS01 pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ ├─saphostagent.service 
│ │ ├─ 900 /usr/sap/hostctrl/exe/saphostexec pf=/usr/sap/hostctrl/exe/host_profile -nodaemon -trace
│ │ ├─ 984 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile
│ │ └─2428 /usr/sap/hostctrl/exe/saposcol -l -w60 pf=/usr/sap/hostctrl/exe/host_profile
│ └─wmp-rece5b7fa372e4619a9623e120aa23a23.scope 
│   ├─5522 sapstart pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
│   ├─7824 dw.sapNW1_D00 pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
│   ├─7825 ig.sapNW1_D00 -mode=profile pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
...

>  systemctl show -p MemoryLow SAP.slice
MemoryLow=24584065024

>  systemctl show -p MemoryLow wmp-rece5b7fa372e4619a9623e120aa23a23.scope 
MemoryLow=infinity

>  systemctl show -p MemoryLow SAPNW1_01.service 
MemoryLow=infinity

>  systemctl show -p MemoryLow saphostagent.service 
MemoryLow=infinity

systemd統合の詳細については、『SAP Note 139184 - Linux: systemd integration for sapstartsrv and SAP Host Agent』を参照してください。

9.10 systemdベースのインスタンスのみを実行しているシステム

注記
注記

SUSEのHAクラスタソリューションは、完全にsystemdベースのSAPシステムでサポートされています。

systemdベースのインスタンスで構成されるSAPシステムは、メモリ保護のためにcgroup2しか利用できません。

インスタンスは、SAP Start Serviceによって専用のcgroup (デフォルトはSAP.slice)に配置されます。したがって、統合されたcgroup2階層に切り替えて、MemoryLow=を正しく設定するだけで済みます。

ワークロードメモリ保護がすでに設定されている場合は、9.9項 「systemdベースのSAPインスタンスと通常のSAPインスタンスの両方を実行しているシステム」の手順に従います。その後、wmp-sample-memory.timerおよびwmp-sample-memory.serviceを使用してメモリ使用量を監視する場合を除いて、パッケージsapwmpをシステムから削除できます。

systemdベースのSAPインスタンスのみで構成されるシステムのメモリ保護を設定するには、次の手順を実行します。

次の例は、systemdベースの環境を示しています。SAP Host Agentとすべてのインスタンスは、SAP.sliceの下のcgroupにあります。SAP.sliceに対してMemoryLow=が設定されており、その下のすべてのcgroupsに対してMemoryLow=infinityが設定されています。

>  systemd-cgls
Control group /:
-.slice
├─SAP.slice 
│ ├─SAPNW1_00.service 
│ │ ├─5522 sapstart pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
│ │ ├─7824 dw.sapNW1_D00 pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
│ │ ├─7825 ig.sapNW1_D00 -mode=profile pf=/usr/sap/NW1/SYS/profile/NW1_D00_systemdproj
...
│ ├─SAPNW1_01.service 
│ │ ├─ 887 /usr/sap/NW1/ASCS01/exe/sapstartsrv pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ ├─2838 sapstart pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ ├─2895 ms.sapNW1_ASCS01 pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ │ └─2896 en.sapNW1_ASCS01 pf=/usr/sap/NW1/SYS/profile/NW1_ASCS01_systemdproj
│ └─saphostagent.service 
│   ├─ 900 /usr/sap/hostctrl/exe/saphostexec pf=/usr/sap/hostctrl/exe/host_profile -nodaemon -trace
│   ├─ 984 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile
│   └─2428 /usr/sap/hostctrl/exe/saposcol -l -w60 pf=/usr/sap/hostctrl/exe/host_profile
...

>  systemctl show -p MemoryLow SAP.slice
MemoryLow=24584065024

>  systemctl show -p MemoryLow wmp-rece5b7fa372e4619a9623e120aa23a23.scope 
MemoryLow=infinity

>  systemctl show -p MemoryLow SAPNW1_01.service 
MemoryLow=infinity

>  systemctl show -p MemoryLow saphostagent.service 
MemoryLow=infinity