Red Hat Training

A Red Hat training course is available for RHEL 8

35.3. 仮想メモリーパラメーター

仮想メモリーのパラメーターは、/proc/sys/vm ディレクトリーにリスト表示されます。

利用可能な仮想メモリーパラメーターを以下に示します。

vm.dirty_ratio
パーセンテージの値です。システムメモリー合計の割合がこの値を超えると、システムは、pdflush 操作でディスクへの変更の書き込みを開始します。デフォルト値は 20 % です。
vm.dirty_background_ratio
パーセンテージの値。システムメモリー合計の割合がこの値を超えると、システムはバックグラウンドでディスクへの変更の書き込みを開始します。デフォルト値は 10 % です。
vm.overcommit_memory

大容量メモリーのリクエストを受け入れるか拒否するかを決定する条件を定義します。デフォルト値は 0 です。

デフォルトでは、カーネルは仮想メモリー割り当て要求が現在のメモリー量 (合計 + スワップ) に収まるかどうかをチェックし、大きな要求のみを拒否します。それ以外の場合、仮想メモリーの割り当ては付与され、これはメモリーのオーバーコミットが許可されることを意味します。

overcommit_memory パラメーターの値を設定します。

  • このパラメーターを 1 に設定するとカーネルはメモリーのオーバーコミット処理を行いません。これにより、メモリーがオーバーロードする可能性が向上しますが、メモリー集中型タスクのパフォーマンスが向上します。
  • このパラメーターを 2 に設定すると、カーネルは、利用可能なスワップ領域の合計と、overcommit_ratio で指定される物理 RAM の割合またはそれ以上のメモリーの要求を拒否します。これにより、メモリーのオーバーコミットのリスクが軽減されますが、物理メモリーよりも大きいスワップ領域があるシステムのみに推奨されます。
vm.overcommit_ratio
overcommit_memory2 に設定されている場合に考慮される物理 RAM の割合を指定します。デフォルト値は 50 です。
vm.max_map_count
プロセスが使用可能なメモリーマップ領域の最大数を定義します。デフォルト値は 65530 です。アプリケーションに十分なメモリーマップ領域が必要な場合は、この値を増やします。
vm.min_free_kbytes

予約済み空きページプールのサイズを設定します。また、Linux カーネルのページ回収アルゴリズムの動作を管理する min_pagelow_pagehigh_page のしきい値も設定します。また、システム全体で空き状態になる最小キロバイト数も指定します。これにより、各ローメモリーゾーンの特定の値を計算します。それぞれには、サイズに比例して予約済み空きページが多数割り当てられます。

vm.min_free_kbytes パラメーターの値の設定:

  • パラメーターの値を増やすと、アプリケーションのワーキングセットが効果的に減少します。そのため、カーネル駆動型のワークロードのみに使用するほうがよい場合があります。この場合、ドライバーバッファーはアトミックコンテキストで割り当てる必要があります。
  • パラメーターの値を下げると、システムでメモリーが不足した場合に、カーネルがシステム要求の処理をレンダリングできなくなる可能性があります。

    警告

    極端な値は、システムのパフォーマンスに悪影響を与えます。vm.min_free_kbytes が非常に低い値に設定すると、システムのメモリーを効果的に回収できなくなります。これにより、システムがクラッシュし、サービス割り込みやその他のカーネルサービスに失敗する可能性があります。ただし、vm.min_free_kbytes を設定すると、システムの回収アクティビティーが大幅に増大し、誤ったダイレクト回収状態により割り当てレイテンシーが発生します。これにより、システムがメモリー不足の状態に即座に入ります。

    vm.min_free_kbytes パラメーターは、min_pages というページ回収ウォーターマークも設定します。このウォーターマークは、ページの回収アルゴリズムを管理する他の 2 つのメモリー基準 (low_pages、および high_pages) を決定する要素として使用されます。

/proc/PID/oom_adj

システムがメモリー不足になり、panic_on_oom パラメーターが 0 に設定されている場合は、oom_killer 関数は、システムが復旧するまで、プロセスを強制終了し、最も高い oom_score を持つプロセスを開始します。

oom_adj パラメーターは、プロセスの oom_score を決定します。このパラメーターはプロセス ID ごとに設定されます。-17 の値は、そのプロセスの oom_killer を無効にします。そのほかの有効な値は、-16 から 15 までになります。

注記

調整したプロセスによって作成されたプロセスは、そのプロセスの oom_score を継承します。

vm.swappiness

swappiness 値 (0 から 200 まで) は、システムが匿名メモリープールまたはページキャッシュメモリープールからメモリーの回収を優先するレベルを制御します。

swappiness パラメーターの値の設定:

  • 値を高くすると、ファイルマップ駆動型のワークロードが優先され、RAM のアクティブにアクセスされるプロセスの匿名マッピングメモリーをスワップアウトします。これは、ストレージのファイルのデータに依存するファイルサーバーやストリーミングアプリケーションが、サービスリクエストの I/O レイテンシーを低減させるためにメモリーに駐在するのに便利です。
  • 値が小さいほど、ページキャッシュ (ファイルマップされたメモリー) を回収しつつ、匿名のマッピング駆動型ワークロードが優先されます。この設定は、ファイルシステム情報に大きく依存しないアプリケーション、数学的アプリケーションや数値計算アプリケーションなどの動的に割り当てられたメモリーやプライベートメモリーを大幅に使用するアプリケーション、QEMU のような一部のハードウェア仮想化スーパーバイザーにおいて有用です。

    vm.swappiness パラメーターのデフォルト値は 60 です。

    警告
    • vm.swappiness0 に設定すると、匿名メモリーをディスクにスワップアウトする必要がなくなります。これにより、メモリーまたは I/O 集約型のワークロード下で oom_killer 関数によるプロセスの強制終了のリスクが高まります。
    • cgroupsV1 を使用している場合は、cgroupsV1 専用の cgroup ごとの swappiness 値が使用されます。そのため、vm.swappiness パラメーターでシステム全体のスワップを設定しても、システムのスワップ動作にはほとんど影響がありません。この問題により、予期しない一貫性のないスワップ動作が発生する可能性があります。

      このような場合は、vm.force_cgroup_v2_swappiness パラメーターの使用を検討してください。

      詳細は、Premature swapping with swappiness=0 while there is still plenty of pagecache to be reclaimed KCS ソリューションを参照してください。

force_cgroup_v2_swappiness
この制御は、cgroupsV1 でのみ使用可能な cgroup ごとの swappiness 値を非推奨にするために使用されます。すべてのシステムおよびユーザープロセスのほとんどは、cgroup 内で実行されます。Cgroup swappiness 値のデフォルトは 60 です。これにより、システムの swappiness 値がシステムのスワップ動作にほとんど影響を与えないという影響が生じる可能性があります。ユーザーが cgroup ごとの swappiness 機能を気にしない場合は、force_cgroup_v2_swappiness=1 でシステムを設定して、システム全体でより一貫した swappiness の動作を持たせることができます。

関連情報