5.4. 容量のチューニング
このセクションでは、メモリやカーネル、ファイルシステムの容量、それぞれに関連するパラメーター、これらのパラメーターを調整することで発生する代償についての概要を説明します。
チューニング中にこれらの値を一時的に設定するには、echo で proc ファイルシステムの適切なファイルで必要な値を設定します。例えば、
overcommit_memory
を一時的に 1
に設定するには、以下のように実行します。
# echo 1 > /proc/sys/vm/overcommit_memory
proc ファイルシステムのパラメーターへのパスは、変更で影響を受けるシステムによって異なることに注意してください。
これらの値を永続的なものにするには、
sysctl
コマンドを使用する必要があります。詳細については、『導入ガイド』 を参照してください。http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/ から入手できます。
容量関連のメモリのチューニング可能なパラメーター
以下の各パラメーターは、proc ファイルシステムの
/proc/sys/vm/
にあります。
overcommit_memory
- 大量メモリの要求を受け入れるか拒否するかを決定する条件を定義します。このパラメーターには 3 つの値があります。
0
— デフォルト設定。カーネルがメモリの空き容量を概算し、明らかに無効な要求を失敗させることで、ヒューリスティックなメモリオーバーコミット処理を実行します。残念ながら、メモリは厳密なアルゴリズムではなくヒューリスティックなアルゴリズムを使用して割り当てられるため、この設定でシステム上のメモリの空き容量がオーバーロードとなる場合があります。1
— カーネルはメモリオーバーコミット処理を行いません。この設定では、メモリのオーバーロードの可能性が高くなりますが、メモリ集約型のタスクのパフォーマンスも向上します。2
— カーネルは、利用可能なスワップとovercommit_ratio
で指定されている物理 RAM の割合の合計とメモリが同等もしくはそれよりも大きい場合の要求を拒否します。メモリのオーバーコミットのリスクを減らしたい場合は、この設定が最適です。注記
この設定は、スワップ領域が物理メモリよりも大きいシステムにのみ推奨されます。
overcommit_ratio
overcommit_memory
が2
に設定されている場合に考慮される物理 RAM の割合を指定します。デフォルト値は50
です。max_map_count
- プロセスが使用可能なメモリマップ領域の最大数を定義します。ほとんどのケースでは、適切なデフォルト値は
65530
です。アプリケーションがこのファイル数よりも多くマッピングする必要がある場合は、この値を増やします。 nr_hugepages
- カーネルで設定される hugepages の数を定義します。デフォルト値は 0 です。システム内に物理的に連続する空白ページが十分にある場合のみ、hugepages を割り当てる (もしくは解放する) ことが可能です。このパラメーターで保持するページは、他の目的には使えません。詳細はインストール済み資料
/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt
を参照してください。Oracle のデータベースワークロードには、システム上で実行されているデータベースすべてのシステムグローバルエリアの合計よりもわずかに大きいサイズと同等の hugepage 数を Red Hat では推奨しています。データベースのインスタンスあたり 5 つの追加 hugepage で十分です。
容量関連のカーネルの設定可能なパラメーター
以下の各パラメーターは、proc ファイルシステムの
/proc/sys/kernel/
にあります。
msgmax
- メッセージキューでの単一メッセージの最大許容サイズをバイト単位で定義します。この値は、キューのサイズ (
msgmnb
) を超えることはできません。デフォルト値は65536
です。 msgmnb
- 単一メッセージキューの最大サイズをバイト単位で定義します。デフォルト値は
65536
バイトです。 msgmni
- メッセージキュー識別子の最大数を定義します (つまり、キューの最大数)。デフォルト値は低メモリーページの数で増大します。計算式は、全ページ数から高メモリーページ数を引き、その結果を 32 で割り、バイト数単位のページサイズでそれを掛け、最後に MSGMNB の値で割ります。
- sem
- プロセスとスレッドの同期を促進するセマフォは通常、データベースのワークロードを助けるように設定されます。推奨値はデータベースによって異なります。セマフォの値の詳細については、ご使用のデータベースの資料を参照してください。このパラメーターは空白で区切られた 4 つの値を取り、それらは SEMMSL、SEMMNS、SEMOPM、および SEMMNI を表します。
shmall
- 一度にシステム上で使用可能な共有メモリーページの合計数を定義します。Red Hat ではデータベースのワークロードの場合、この値を
shmmax
を hugepage サイズで割った結果に設定することを推奨しています。ただし、Red Hat では推奨値をベンダー資料で確認することを推奨しています。 shmmax
- カーネルが許可する共有メモリーセグメントの最大数をバイト数単位で定義します。Red Hat ではデータベースのワークロードの場合、この値をシステムの総メモリーサイズの 75% 以下にすることを推奨しています。ただし、Red Hat では推奨値をベンダー資料で確認することを推奨しています。
shmmni
- システム全体の共有メモリセグメントの最大数を定義します。デフォルト値は、64 ビットと 32 ビット の両方のアーキテクチャーで
4096
です。 threads-max
- システム全体でカーネルが一度に使用するスレッド (タスク) の最大数を定義します。デフォルト値は、カーネルの
max_threads
値と同等です。使用されている式は以下のとおりです。max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE )
threads-max
の最低値は20
です。
容量関連のファイルシステムのチューニング可能なパラメーター
以下の各パラメーターは、proc ファイルシステムの
/proc/sys/fs/
にあります。
aio-max-nr
- すべてのアクティブな非同期 I/O コンテキスト内で許可されるイベントの最大数を定義します。デフォルト値は
65536
です。この値を変更しても、カーネルデータ構造を事前に割り当てたり、サイズの変更がされないことに留意してください。 file-max
- カーネルが割り当てるファイルハンドルの最大数を一覧表示します。デフォルト値は、カーネル内の
files_stat.max_files
の値と一致し、これは(mempages * (PAGE_SIZE / 1024)) / 10
もしくはNR_FILE
(Red Hat Enterprise Linux では 8192) のどちらか大きい方に設定されます。このファイルで設定値を高くすると、使用可能なファイルハンドルの欠如で発生したエラーを解決できます。
Out of Memory (メモリ不足) 強制終了のチューニング可能な パラメーター
Out of Memory (OOM) は、スワップ領域を含むすべての利用可能なメモリが割り当てられている状態を指します。デフォルトでは、この状況はシステムのパニックを引き起こし、正常機能が停止します。しかし、
/proc/sys/vm/panic_on_oom
パラメーターを 0
に設定すると、OOM 発生時にカーネルが oom_killer
機能を呼び出します。通常は、oom_killer
は非承認のプロセスを強制終了し、システムは維持されます。
以下のパラメーターはプロセスごとの設定が可能で、
oom_killer
機能で強制終了するプロセスの制御能力が高まります。これは、proc ファイルシステムの /proc/pid/
にあり、ここでの pid はプロセス ID 番号になります。
oom_adj
- 値を
-16
から15
の間で定義して、プロセスのoom_score
の決定に役立ちます。oom_score
の値が高いと、oom_killer
でプロセスが強制終了される可能性が高まります。oom_adj
の値を-17
に設定すると、そのプロセスのoom_killer
は無効になります。重要
調整されたプロセスによって生成されたプロセスは、いずれもそのプロセスのoom_score
を継承します。例えば、sshd
プロセスがoom_killer
機能から保護されているとすると、その SSH セッションが開始したプロセスもすべて保護されることになります。これは、OOM 発生時にシステムを救助するoom_killer
機能の能力に影響します。