39.3. 仮想メモリーパラメーター
仮想メモリーのパラメーターは、/proc/sys/vm ディレクトリーにリスト表示されます。
利用可能な仮想メモリーパラメーターを以下に示します。
vm.dirty_ratio-
パーセンテージの値です。変更された合計システムメモリーの割合がこの値に達すると、システムがディスクへの変更の書き込みを開始します。デフォルト値は
20% です。 vm.dirty_background_ratio-
パーセンテージの値。変更された合計システムメモリーの割合がこの値に達すると、システムがバックグラウンドでディスクへの変更の書き込みを開始します。デフォルト値は
10% です。 vm.overcommit_memoryメモリーリクエストを受諾または拒否されるかどうかを決定する条件を定義します。デフォルト値は
0です。overcommit_memoryパラメーターの値を設定します。-
このパラメーターを
0に設定するとカーネルは、ユーザー空間のメモリー要求サイズを合計メモリーと swap と比較し、明らかなオーバーコミットを拒否します。他の割り当てが付与され、メモリーのオーバーコミットが可能になります。 -
このパラメーターを
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を決定します。このパラメーターはプロセス識別子ごとに設定されます。-17の値は、そのプロセスのoom_killerを無効にします。そのほかの有効な値は、-16から15までになります。
調整したプロセスによって作成されたプロセスは、そのプロセスの oom_score を継承します。
vm.swappinessswappiness 値 (
0から200まで) は、システムが匿名メモリープールまたはページキャッシュメモリープールからメモリーの回収を優先するレベルを制御します。swappinessパラメーターの値の設定:- 値を高くすると、ファイルマップ駆動型のワークロードが優先され、RAM のアクティブにアクセスされるプロセスの匿名マッピングメモリーをスワップアウトします。これは、ストレージのファイルのデータに依存するファイルサーバーやストリーミングアプリケーションが、サービスリクエストの I/O レイテンシーを低減させるためにメモリーに駐在するのに便利です。
値が小さいほど、ページキャッシュ (ファイルマップされたメモリー) を回収しつつ、匿名のマッピング駆動型ワークロードが優先されます。この設定は、ファイルシステム情報に大きく依存しないアプリケーション、数学的アプリケーションや数値計算アプリケーションなどの動的に割り当てられたメモリーやプライベートメモリーを大幅に使用するアプリケーション、QEMU のような一部のハードウェア仮想化スーパーバイザーにおいて有用です。
vm.swappinessパラメーターのデフォルト値は60です。警告vm.swappinessを0に設定すると、匿名メモリーをディスクにスワップアウトする必要がなくなります。これにより、メモリーまたは I/O 集約型のワークロード下でoom_killer関数によるプロセスの強制終了のリスクが高まります。