Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.5. システムメモリー容量の設定

このセクションではメモリーの使用量を改善する場合に役立つメモリー関連のカーネルパラメーターについて説明しています。/proc ファイルシステム内の該当ファイルの値を変更し、テストとして一時的に設定することができます。そのパラメーターで使用環境に適したパフォーマンスが得られることを確認したら sysctl コマンドを使って今度は永続的にパラメーターを設定します。
メモリーの使用量は一般的にはカーネルパラメーター値で設定されます。一時的に設定する場合は /proc ファイルシステム内のファイルの内容を変更し、永続的に変更する場合は、procps-ng パッケージで提供される sysctl ツールを使用して行います。
たとえば overcommit_memory パラメーターを一時的に 1 に設定する場合は次のコマンドを実行します。
# echo 1 > /proc/sys/vm/overcommit_memory
この値を永続的に設定するには、/etc/sysctl.confsysctl vm.overcommit_memory=1 を追加し、次のコマンドを実行します。
# sysctl -p
システムに対するパラメーターの影響を確認する場合には一時的な設定が便利です。パラメーター値で期待する影響を得られたことを確認したら永続的な設定を行います。
注記
専門知識を深めるには、Red Hat Enterprise Linux パフォーマンスチューニング (RH442) トレーニングコースの受講をお勧めします。

7.5.1. 仮想メモリーのパラメーター

本セクションのパラメーターは特に記載のない限り /proc/sys/vm にあります。
dirty_ratio
パーセンテージの値。指定したパーセント値の合計メモリーが変更されるとシステムはその変更を pdflush 演算でディスクに記述し始めます。デフォルト値は 20 % です。
dirty_background_ratio
パーセンテージの値。指定したパーセント値の合計メモリーが変更されるとシステムはその変更をバックグラウンドでディスクに記述し始めます。デフォルト値は 10 % です。
overcommit_memory
大量メモリーの要求を許可するか拒否するか決定する条件を定義します。
デフォルト値は 0 です。デフォルトでは、カーネルは、利用可能なメモリー量と大きすぎる要求の失敗を予測することで、ヒューリスティックなメモリーのオーバーコミット処理を実行します。ただし、メモリーは正確なアルゴリズムではなくヒューリスティックで割り当てられるため、この設定ではメモリーをオーバーロードすることができます。
このパラメーターを 1 に設定するとカーネルはメモリーのオーバーコミット処理を行いません。これにより、メモリーがオーバーロードする可能性が向上しますが、メモリー集中型タスクのパフォーマンスが向上します。
このパラメーターを 2 に設定すると、カーネルは、利用可能なスワップ領域の合計と、overcommit_ratio で指定される物理 RAM の割合またはそれ以上のメモリーの要求を拒否します。これにより、メモリーのオーバーコミットのリスクが軽減されますが、物理メモリーよりも大きいスワップ領域があるシステムのみに推奨されます。
overcommit_ratio
overcommit_memory2 に設定されている場合に考慮される物理 RAM の割合を指定します。デフォルト値は 50 です。
max_map_count
プロセスが使用可能なメモリーマップ領域の最大数を定義します。ほとんどの場合デフォルト値の 65530 が適した値になります。アプリケーション側でこのファイル数以上の数をマッピングする必要がある場合はこの値を増やします。
min_free_kbytes
システム全体で維持する空領域の最小値をキロバイト単位で指定します。これを使って各低メモリーゾーンに適切な値が確定され、そのサイズに比例した空き予約ページ数が割り当てられます。
警告
設定値が低すぎるとシステムを破損する恐れがあります。min_free_kbytes の設定が低すぎると、システムによるメモリーの回収が妨げられます。これによりシステムがハングし、メモリー不足によってプロセスが強制終了される可能性があります。ただし、min_free_kbytes の設定が高すぎると (システムメモリー合計の 5 – 10% など) システムがすぐにメモリー不足に陥ってしまうためメモリーの回収に非常に時間がかかることになります。
oom_adj
panic_on_oom パラメーターが 0 に設定されている状態でメモリーを使い切ってしまうと、oom_killer 関数はシステムが復元できるようになるまでプロセスを強制終了し、プロセスを最も高い oom_score で起動します。
oom_adj パラメーターは、プロセスの oom_score を決定するのに役立ちます。このパラメーターはプロセス ID ごとに設定されます。-17 の値を設定するとそのプロセスの oom_killer は無効になります。これ以外にも -16 から 15 までの値を使用することができます。
注記
調整されたプロセスによって生成されたプロセスは、プロセスの oom_score を継承します。
スワップ
swappiness 値 (0 から 100) は、システムが匿名メモリーやページキャッシュを優先する度合いを制御します。値が大きい場合は、ファイルシステムのパフォーマンスが改善され、あまり活発ではないプロセスが RAM から積極的にスワップされます。値が小さい場合は、メモリーからのプロセスのスワップが回避されます。通常この場合は、レイテンシーが低下しますが I/O パフォーマンスが犠牲になります。デフォルト値は 60 です。
警告
swappiness==0 に設定すると非常に強力にスワップを避けるため、メモリーおよび I/O に圧力がかかりメモリー不足によるプロセスの強制終了のリスクが高まります。