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_memory
が2
に設定されている場合に考慮される物理 RAM の割合を指定します。デフォルト値は50
です。 vm.max_map_count
-
プロセスが使用可能なメモリーマップ領域の最大数を定義します。デフォルト値は
65530
です。アプリケーションに十分なメモリーマップ領域が必要な場合は、この値を増やします。 vm.min_free_kbytes
予約済み空きページプールのサイズを設定します。また、Linux カーネルのページ回収アルゴリズムの動作を管理する
min_page
、low_page
、high_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.swappiness
を0
に設定すると、匿名メモリーをディスクにスワップアウトする必要がなくなります。これにより、メモリーまたは I/O 集約型のワークロード下でoom_killer
関数によるプロセスの強制終了のリスクが高まります。
force_cgroup_v2_swappiness
-
この制御は、
cgroupsV1
でのみ使用可能な cgroup ごとの swappiness 値を非推奨にするために使用されます。すべてのシステムおよびユーザープロセスのほとんどは、cgroup 内で実行されます。Cgroup swappiness 値のデフォルトは 60 です。これにより、システムの swappiness 値がシステムのスワップ動作にほとんど影響を与えないという影響が生じる可能性があります。ユーザーが cgroup ごとの swappiness 機能を気にしない場合は、force_cgroup_v2_swappiness=1
でシステムを設定して、システム全体でより一貫した swappiness の動作を持たせることができます。
関連情報
-
man ページの
sysctl(8)
- メモリー関連のカーネルパラメーターの設定