Oracle Solaris カーネルのチューンアップ・リファレンスマニュアル

カーネルとメモリーの一般的なパラメータ

この節では、物理メモリーやスタック構成に関連する一般的なカーネルパラメータについて説明します。

physmem

備考欄

Solaris OS とファームウェアが把握されたあとで、メモリーの物理ページ数に関するシステム構成を変更します。

データ型

符号なし long

デフォルト

そのシステムで使用できる物理メモリーのページ数。これには、コアカーネルとそのデータが格納されているメモリーは含まれません。

範囲

1 からシステムの物理メモリーの総量まで

単位

ページ

動的か

いいえ

検査

なし

どのような場合に変更するか

より少ない物理メモリーでシステムを実行したときの影響を調べたい場合。このパラメータに対しては、コアカーネルやそのデータ、その他のさまざまなデータ構造体 (起動処理の初期に割り当て) などのメモリーは考慮されません。したがって、physmem の値は、より小さなメモリー量を表わすよう、想定したページ数より小さくすべきです。

コミットレベル

変更の可能性あり

zfs_arc_min

備考欄

ZFS 調整可能置換キャッシュ (ARC) の最小サイズを決定します。関連項目: zfs_arc_max

データ型

符号なし整数 (64 ビット)

デフォルト

物理メモリーの 32 分の 1 または 64M バイトのうち大きいほうの値

範囲

64M バイトから zfs_arc_max

単位

バイト

動的か

いいえ

検査

はい、範囲が検査されます。

どのような場合に変更するか

システムのメモリー負荷要求が変動するとき、ZFS ARC は要求の少ない時期はデータをキャッシュし、要求の多い時期は縮小します。ただし、ZFS は zfs_arc_min の値を下回って縮小することはありません。zfs_arc_min のデフォルト値は多くのメモリーを搭載したシステムでメモリー容量の 12% であるため、かなりのメモリー容量を使用する可能性があります。最大負荷時に要求されるメモリー使用量がシステムメモリーの 88% を超える場合は、このパラメータを調整することを検討してください。

コミットレベル

変更の可能性あり

変更履歴

詳細は、zfs_arc_min (Solaris 10 リリース)」を参照してください。

zfs_arc_max

備考欄

ZFS 調整可能置換キャッシュ (ARC) の最大サイズを決定します。関連項目: zfs_arc_min.

データ型

符号なし整数 (64 ビット)

デフォルト

搭載メモリーが 4G バイト未満のシステムでは、メモリー容量の 4 分の 3

搭載メモリーが 4G バイトを超えるシステムでは、physmem から 1G バイトを引いた値

範囲

64M バイトからphysmem

単位

バイト

動的か

いいえ

検査

はい、範囲が検査されます。

どのような場合に変更するか

将来のメモリー要求が非常に大きく、十分に定義されている場合、ARC がメモリー要求と競合しないように、このパラメータの値を減らして ARC を制限することを検討できます。たとえば、将来の負荷がメモリーの 20% を要求することがわかっている場合、残りの 80% より多くのメモリーを消費しないように ARC を制限することは意味があります。

コミットレベル

変更の可能性あり

変更履歴

詳細は、zfs_arc_max (Solaris 10 リリース)」を参照してください。

default_stksize

備考欄

すべてのスレッドのデフォルトスタックサイズを指定します。default_stksize より小さいスタックサイズを指定してスレッドを作成することはできません。default_stksize が設定されている場合、それは lwp_default_stksize に優先します。lwp_default_stksize も参照してください。

データ型

整数

デフォルト
  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

範囲

最小値はデフォルト値です。

  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

最大値はデフォルト値の 32 倍です。

単位

getpagesize パラメータから戻った値の倍数になるバイト数です。詳細は、getpagesize(3C) を参照してください。

動的か

はい。変数の変更後、作成されるスレッドに影響があります。

検査

8192 以上、262,144 (256 x 1024) 以下にする必要があります。また、システムページサイズの倍数でなければなりません。これらの条件が満たされないと、次のメッセージが表示されます。


Illegal stack size, Using N

N の値は、 default_stksize のデフォルト値です。

どのような場合に変更するか

スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。

デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が不当に増加します。通常、そのスペースは使用されません。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響として、カーネルが作成できるスレッドの数が少なくなります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。

コミットレベル

変更の可能性あり

lwp_default_stksize

備考欄

カーネルスレッドの作成時に呼び出しルーチンが明示的に使用サイズを提供しなかった場合に使用する、スタックの大きさのデフォルト値を指定します。

データ型

整数

デフォルト
  • 8192 (x86 プラットフォーム)

  • 24,576 (SPARC プラットフォーム)

  • 20,480 (AMD64 プラットフォーム)

範囲

最小値はデフォルト値です。

  • SPARCシステムでは PAGESIZE の 3 倍。

  • x86 システムでは PAGESIZE の 2 倍。

  • AMD64 システムでは PAGESIZE の 5 倍。

最大値はデフォルト値の 32 倍です。

単位

getpagesize パラメータから戻った値の倍数になるバイト数です。詳細は、getpagesize(3C) を参照してください。

動的か

はい。変数の変更後、作成されるスレッドに影響があります。

検査

8192 以上、262,144 (256 x 1024) 以下にする必要があります。また、システムページサイズの倍数でなければなりません。これらの条件が満たされないと、次のメッセージが表示されます。


Illegal stack size, Using N

N の値は、lwp_default_stksize のデフォルト値です。

どのような場合に変更するか

スタック容量が足りないためにシステムがパニックになる場合。この問題を解決する最もよい方法は、システムが容量を使い果たす原因を明らかにし、それを修正することです。

デフォルトのスタックサイズを増やすと、ほとんどすべてのカーネルスレッドのスタックが大きくなるため、カーネルのメモリー使用量が不当に増加します。通常、そのスペースは使用されません。さらに、カーネルの使用量が増えると、同じメモリープールを使用する他のリソースの容量が少なくなるため、システムの作業を行う能力が低下するおそれがあります。副次的な影響として、カーネルが作成できるスレッドの数が少なくなります。したがって、この方法は、根本的な原因が解消されるまでの一時的な回避策として使用すべきです。

コミットレベル

変更の可能性あり

変更履歴

詳細は、lwp_default_stksize (Solaris 9 リリース)」を参照してください。

logevent_max_q_sz

備考欄

キューに格納して syseventd デーモンへの配信を待機させることのできる、システムイベントの最大数です。システムイベントキューのサイズがこの制限に達すると、他のシステムイベントをキューに入れることはできません。

データ型

整数

デフォルト

5000

範囲

0 から MAXINT

単位

システムイベント

動的か

はい

検査

ddi_log_syseventsysevent_post_event によってシステムイベントが生成されるたびに、システムイベントフレームワークはこの値をチェックします。

詳細は、ddi_log_sysevent(9F) およびsysevent_post_event(3SYSEVENT) のマニュアルページを参照してください。

どのような場合に変更するか

システムイベントのログ、生成、または送信が失敗したことをエラーログメッセージが示す場合。

コミットレベル

変更の可能性あり

segkpsize

備考欄

利用できるページング可能なカーネルのメモリー量を指定します。このメモリーは主にカーネルスレッドのスタックに使用されます。この値を増やすと、スレッドの数を増やさないのであれば個々のスレッドでより大きなスタックが使用でき、あるいはより多くのスレッドを使用できるようになります。このパラメータを設定できるのは、64 ビットカーネルが動作しているシステムに限られます。64 ビットカーネルが動作しているシステムは、デフォルトで、24K バイトのスタックサイズを使用します。

データ型

符号なし long

デフォルト

64 ビットカーネルでは 2G バイト

32 ビットカーネルでは 512M バイト

範囲

64 ビットカーネルでは 512M バイトから 24G バイト

単位

8K バイトのページ

動的か

いいえ

検査

最小サイズと最大サイズ (64 ビットシステムではそれぞれ 512 バイトと 24G バイト) に対して値を比較します。最小サイズに満たないか、または最大サイズを超えている場合は 2G バイトにリセットされます。その作用に関するメッセージが表示されます。

キャッシュの作成で実際に使用されるサイズは、検査後、segkpsize に指定されている値か、物理メモリーの 50% のうち、小さい方です。

どのような場合に変更するか

システム上で多数のプロセスをサポートしなければならない場合。デフォルトサイズの 2G バイトは、少なくとも 1G バイトの物理メモリーがあるという前提です。このデフォルトサイズによって、87,000 以上のカーネルスレッドに 24K バイトのスタックを作成できます。64 ビットカーネルのスタックサイズは、プロセスが 32 ビットプロセスでも 64 ビットプロセスでも同じです。これより大きな数が必要な場合は、物理メモリーが十分にあれば segkpsize を増やすことができます。

コミットレベル

変更の可能性あり

変更履歴

segkpsize (Solaris 9 12/02 リリース)」を参照してください。

noexec_user_stack

備考欄

スタックを実行不能として指定できるので、バッファーオーバーフロー攻撃がいっそう困難になります。

64 ビットカーネルが動作している Solaris システムでは、すべての 64 ビットアプリケーションのスタックがデフォルトで実行不能になります。64 ビットカーネルおよび 32 ビットカーネルが動作するシステムで 32 ビットアプリケーションのスタックを実行不能にするには、このパラメータの設定が必要です。


注 –

このパラメータは Solaris 2.6、7、8、9、または 10 リリースが動作しているすべてのシステム上に存在しますが、有効になるのは 64 ビットの SPARC と AMD64 のアーキテクチャーの場合に限られます。


データ型

符号付き整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい。ただし、すでに実行中のプロセスに対しては無効です。値が設定された後に起動されたプロセスに対してのみ有効です。

検査

なし

どのような場合に変更するか

アプリケーションが、mprotect を使用してスタックを実行可能にすることなくスタックに実行可能コードを意図的に置いている場合を除き、この変数は常に有効にすべきです。詳細は、mprotect(2) のマニュアルページを参照してください。

コミットレベル

変更の可能性あり

変更履歴

noexec_user_stack (Solaris 9 リリース)」を参照してください。