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.conf に sysctl 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 に設定すると、カーネルは、利用可能な swap 領域の合計および overcommit_ratio で指定されている物理 RAM の割合と同じか、それ以上のメモリー要求を拒否します。これにより、メモリーのオーバーコミットのリスクが軽減されますが、物理メモリーよりも大きいスワップ領域があるシステムのみに推奨されます。
overcommit_ratio
overcommit_memory2 に設定されている場合に考慮される物理 RAM の割合を指定します。デフォルト値は 50 です。
max_map_count
プロセスが使用可能なメモリーマップ領域の最大数を定義します。デフォルト値(65530)は、ほとんどの場合に適しています。アプリケーション側でこのファイル数以上の数をマッピングする必要がある場合はこの値を増やします。
min_free_kbytes
システム全体で維持する空領域の最小値をキロバイト単位で指定します。これを使用して各低メモリーゾーンに適切な値が確定され、そのサイズに比例した空き予約ページ数が割り当てられます。
警告
設定値が低すぎるとシステムを破損する恐れがあります。min_free_kbytes を非常に低い値に設定すると、システムがメモリーを回収できなくなります。これにより、システムがハングし、プロセスが OOM で強制終了される可能性があります。ただし、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 の圧力が高まる場合に OOM による強制終了のリスクが高まります。

7.5.2. ファイルシステムのパラメーター

このセクションにリストされているパラメーターは、特に指定がない限り /proc/sys/fs にあります。
aio-max-nr
すべてのアクティブな非同期入出力コンテキストで許可されるイベントの最大数を定義します。デフォルト値は 65536 です。この値を変更しても、カーネルデータ構造を事前に割り当てたり、サイズの変更がされないことに留意してください。
file-max
システム全体でのファイルハンドルの最大数を決定します。Red Hat Enterprise Linux 7 のデフォルト値は、最大 8192 またはカーネルの起動時に利用可能な空きメモリーページの 10 分の 1 です。
この値を設定すると、利用可能なファイルハンドルがないためにエラーを解決できます。

7.5.3. カーネルパラメーター

/proc/sys/kernel/ ディレクトリーにある以下のパラメーターのデフォルト値は、利用可能なシステムリソースに応じて起動時にカーネルによって計算できます。
msgmax
メッセージキュー内の 1 メッセージの最大許容サイズをバイト単位で定義します。この値は、キューのサイズ(msgmnb)を超えることはできません。システムの現在の msgmax 値を確認するには、以下を使用します。
# sysctl kernel.msgmax
msgmnb
単一のメッセージキューの最大サイズをバイト単位で定義します。システムの現在の msgmnb 値を確認するには、以下を使用します。
# sysctl kernel.msgmnb
msgmni
メッセージキュー識別子の最大数 (つまりキューの最大数) を定義します。システムの現在の msgmni 値を確認するには、以下を使用します。
# sysctl kernel.msgmni
shmall
一度にシステムで使用できる共有メモリーページの合計量を定義します。ちなみに、AMD64 および Intel 64 アーキテクチャーでは 1 ページは 4096 バイトに相当します。
システムの現在の shmall 値を確認するには、以下を使用します。
# sysctl kernel.shmall
shmmax
カーネルで許容される 1 共有メモリーセグメントの最大サイズをバイト単位で定義します。システムの現在の shmmax 値を確認するには、以下を使用します。
# sysctl kernel.shmmax
shmmni
システム全体の共有メモリーセグメントの最大数を定義します。すべてのシステムでは、デフォルト値は 4096 です。
threads-max
システム全体でカーネルが一度に使用できるスレッドの最大数を定義します。システムの現在の threads-max 値を確認するには、以下を使用します。
# sysctl kernel.threads-max
デフォルト値は、以下の式で算出されます。
mempages / (8 * THREAD_SIZE / PAGE SIZE )
最小値は 20 です。