5.5. 仮想メモリのチューニング

仮想メモリーは通常、プロセスやファイルシステムキャッシュ、カーネルが使用します。仮想メモリーの使用率は多くの要素に依存しており、それらは以下のパラメーターで影響及ぼすことができます。
swappiness
0 から 100 の値でシステムがスワップを行う程度を制御します。値が高い場合はシステムのパフォーマンスを優先し、物理メモリがアクティブでない場合にメモリからプロセスを積極的にスワップします。値が低いと対話機能を優先し、できるだけ長く物理メモリからのプロセスのスワップを回避することから、反応の待ち時間が低下します。デフォルト値は 60 です。
データベースワークロードでは、swappiness の値を高く設定することは推奨されません。たとえば、Oracle データベースでは、swappiness の値を 10 にすることを Red Hat では推奨しています。
vm.swappiness=10
min_free_kbytes
システム全体で空白としておく最低限のキロバイト数です。この値は各低メモリゾーンで警告を発生させる値の計算に使われます。計算後、そのサイズに比例する保存済みの空白ページ数が割り当てられます。

警告

このパラメーターを設定する際には注意してください。値が高すぎたり低すぎたりすると、損害を与える可能性があります。
min_free_kbytes の設定が低すぎると、システムによるメモリの回収が妨げられます。これによりシステムがハングし、メモリ不足によって複数のプロセスが強制終了される可能性があります。
しかしこの値を高く設定しすぎると (システムメモリ全体の 5-10%)、システムが即座にメモリ不足に陥ります。Linux は、利用可能な RAM すべてを使ってファイルシステムデータをキャッシュするように設計されています。min_free_kbytes の値を高く設定すると、システムがメモリ回収に時間を費やしすぎることになります。
dirty_ratio
パーセントの値を定義します。ダーティーデータの writeout は (pdflush 経由で) ダーティーデータがシステムメモリ合計のこのパーセントを占める際に開始されます。デフォルト値は 20 です。
Red Hat はデータベースのワークロードに、少し低めの 15 を推奨しています。
dirty_background_ratio
パーセントの値を定義します。ダーティーデータの writeout は (pdflush 経由で) ダーティーデータがメモリ合計のこのパーセントを占める際にバックグラウンドで開始されます。デフォルト値は 10 です。Red Hat はデータベースのワークロードに、少し低めの 3 を推奨しています。
dirty_expire_centisecs
ダーティーデータがディスクに書き戻されるまでにページキャッシュにとどまる時間を 100 分の 1 秒単位で指定します。Red Hat では、このパラメーターの調整は推奨していません。
dirty_writeback_centisecs
カーネルフラッシャースレッドが再開して適格なデータをディスクに書き込む間隔の長さを 100 分の 1 秒単位で指定します。これを 0 に設定すると、定期書き込み動作は無効になります。Red Hat ではこのパラメーターの調整は推奨していません。
drop_caches
この値を 123 のいずれかに設定すると、カーネルはページキャッシュとスラブキャッシュの様々な組み合わせをもたらします。
1
システムはすべてのページキャッシュメモリを無効にして、解放します。
2
システムはすべての未使用スラブキャッシュメモリを解放します。
3
システムはすべてのページキャッシュとスラブキャッシュメモリを解放します。
これは非破壊的な操作です。ダーティーオブジェクトは解放できないので、このパラメーターの値を設定する前に sync を実行することが推奨されます。

重要

実稼働環境では、drop_caches を使ったメモリの解放は推奨されません。
チューニング中にこれらの値を一時的に設定するには、proc ファイルシステム内の適切なファイルに希望する値を echo コマンドで実行します。例えば、swappiness を一時的に 50 に設定するには、以下を実行します。
# echo 50 > /proc/sys/vm/swappiness
この値を永続的な設定にするには、sysctl コマンドを使う必要があります。詳細は 『導入ガイド』 を参照してください。これは http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/ から入手できます。