Red Hat Training

A Red Hat training course is available for RHEL 8

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

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

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

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

大容量メモリの要求を受け入れるか否かを決定する条件を定義します。

デフォルトでは、カーネルは、利用可能なメモリー量と大きすぎる要求の失敗を予測することで、ヒューリスティックなメモリーのオーバーコミット処理を実行します。ただし、メモリーは正確なアルゴリズムではなくヒューリスティックで割り当てられるため、この設定ではメモリーをオーバーロードすることができます。

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が無効になります。その他の有効な値は、-1615です。

注記

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

vm.swappiness

スワッピネス値は0100の範囲で、システムが匿名メモリプールやページキャッシュメモリプールからのメモリの再利用をどの程度好むかを制御します。

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

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

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

    警告

    vm.swappiness0 に設定すると、匿名メモリーをディスクにスワップアウトする必要がなくなります。これにより、メモリーまたは I/O 集約型のワークロード下で oom_killer 関数によるプロセスの強制終了のリスクが高まります。