Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
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 の割合との合計と同等もしくはそれ以上のメモリー要求は拒否します。メモリーのオーバーコミットに対するリスクは低減しますが swap 領域が物理メモリーより大きいシステムにしか推奨していません。 - overcommit_ratio
overcommit_memory
が2
に設定されている場合に考慮される物理 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
を確定する際に役立ちます。このパラメーターはプロセスの識別子ごとに設定されています。-17
の値を設定するとそのプロセスのoom_killer
は無効になります。これ以外にも-16
から15
までの値を使用することができます。注記
調整されたプロセスによって生成されたプロセスは、プロセスのoom_score
を継承します。- スワップ
- swappiness 値 (
0
〜100
) は、システムが匿名メモリーやページキャッシュを優先する度合いを制御します。値が大きい場合は、ファイルシステムのパフォーマンスが改善され、あまり活発ではないプロセスが RAM から積極的にスワップされます。値が小さい場合は、メモリーからのプロセスのスワップが回避されます。通常この場合は、レイテンシーが低下しますが I/O パフォーマンスが犠牲になります。デフォルト値は60
です。警告
swappiness==0
に設定すると非常に強力にスワップを避けるため、メモリーおよび I/O に圧力がかかりメモリー不足によるプロセスの強制終了のリスクが高まります。
7.5.2. ファイルシステムのパラメーター
本セクションのパラメーターは特に記載のない限り
/proc/sys/fs
にあります。
- aio-max-nr
- アクティブな非同期の全入出力コンテキスト内で許可されるイベントの最大数を定義します。デフォルト値は
65536
です。この値を変更しても、カーネルデータ構造を事前に割り当てたり、サイズの変更がされないことに留意してください。 - file-max
- システム全体のファイルハンドルの最大数を決定します。Red Hat Enterprise Linux 7 のデフォルト値は最大値である
8192
、またはカーネルの起動時に利用可能な空きメモリーページの 1/10 です。この値を上げるとファイル処理数の不足が原因のエラーを解決できるようになります。
7.5.3. カーネルパラメーター
/proc/sys/kernel/
ディレクトリーにある以下のパラメーターのデフォルト値は、利用可能なシステムリソースに応じて起動時にカーネルによって計算されます。
- msgmax
- メッセージキュー内の 1 メッセージの最大許容サイズをバイト単位で定義します。この値はキューのサイズ (
msgmnb
) を超えることはできません。システムの現在のmsgmax
値を確認するには、以下のコマンドを使用します。# sysctl kernel.msgmax
- msgmnb
- 1 メッセージキューの最大サイズをバイト単位で定義します。システムの現在の
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
です。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。