Go to main content
Oracle® Solaris 11.3 カーネルのチューンアップ・リファレンスマニュアル

印刷ビューの終了

更新: 2016 年 11 月
 
 

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

このセクションでは、物理メモリーやスタック構成に関連する一般的なカーネルパラメータについて説明します。ZFS 関連のメモリーパラメータについては、Oracle Solaris ZFS チューニング可能パラメータを参照してください。

physmem

説明

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

データ型

符号なし long

デフォルト

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

範囲

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

単位

ページ

動的か

いいえ

検証

なし

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

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

コミットレベル

変更の可能性あり

default_stksize

説明

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

データ型

整数

デフォルト
  • sun4u プロセッサ搭載の SPARC システムでは PAGESIZE の 3 倍

  • sun4v プロセッサ搭載の SPARC システムでは PAGESIZE の 4 倍

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

範囲

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

  • sun4u プロセッサ搭載の SPARC システムでは PAGESIZE の 3 倍

  • sun4v プロセッサ搭載の SPARC システムでは PAGESIZE の 4 倍

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

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

単位

getpagesize パラメータから返された値の倍数単位で指定されたバイト数です。詳細は、getpagesize(3C) のマニュアルページを参照してください。

動的か

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

検証

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

Illegal stack size, Using N

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

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

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

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

コミットレベル

変更の可能性あり

lwp_default_stksize

説明

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

データ型

整数

デフォルト
  • デフォルトの SPARC スタックサイズは 3 ページ (3 x 8,192 = 24,576) + 8 KB (レッドゾーン) です。

  • デフォルトの x64 スタックサイズは 5 ページ (5 x 4,096 = 20,480) + 4 KB (レッドゾーン) です。

範囲

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

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

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

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

単位

getpagesize パラメータから返された値の倍数単位で指定されたバイト数です。詳細は、getpagesize(3C) のマニュアルページを参照してください。

動的か

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

検証

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

Illegal stack size, Using N

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

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

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

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

コミットレベル

変更の可能性あり

logevent_max_q_sz

説明

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

データ型

整数

デフォルト

5000

範囲

0 から MAXINT

単位

システムイベント

動的か

はい

検証

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

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

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

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

コミットレベル

変更の可能性あり

segkpsize

説明

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

  • SPARC: このパラメータは、/etc/system ファイルで変更できます。

  • x64: このパラメータは次の方法によってのみ変更できます。

    • カーネルデバッガを使用してブートする

    • システム起動プロセスの先頭にブレークポイントを設定する

    • 目的の値に設定する

データ型

符号なし long

デフォルト

2G バイト x nCPU/128 または物理メモリーの容量/256G バイトのどちらか小さい方

範囲

512M バイトから 64G バイト (SPARC)

200M バイトから 8G バイト (x64)

単位

ページ

動的か

いいえ

検証

値は最小および最大サイズと比較されます。最小値に満たないか、または最大値を超えている場合は 2G バイトにリセットされます。その作用に関するメッセージが表示されます。

SPARC システムでは、segkpsize 値は物理メモリーのサイズの 2 倍を超えることができません。x64 システムでは、値は物理メモリーのサイズを超えることができません。

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

システム上で多数のプロセスをサポートしなければならない場合。このデフォルトサイズでは、65,535 個のカーネルスレッドに 32K バイトのスタックを作成できます。64 ビットカーネルのカーネルスタックサイズは、プロセスが 32 ビットプロセスでも 64 ビットプロセスでも同じです。

コミットレベル

変更の可能性あり

noexec_user_stack


注 -  noexec_user_stack は引き続き機能しますが、このパラメータはこの Oracle Solaris リリースでは非推奨です。代わりに nxheap および nxstack セキュリティー拡張機能を使用してください。Oracle Solaris の拡張機能は、sxadm コマンドを使用して、システムレベルおよびプロセスレベルで制御したり構成したりできます。

nxheap および nxstack の使用を示す手順および例については、Oracle Solaris 11.3 でのシステムおよび接続されたデバイスのセキュリティー保護 の 悪影響からのプロセスヒープと実行可能スタックの保護を参照してください。

sxadm コマンドの詳細は、sxadm(1M) のマニュアルページを参照してください。

Oracle Solaris をセキュリティー保護および強化するためのガイドラインについては、Oracle Solaris 11 セキュリティーと強化ガイドラインを参照してください。


説明

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

64 ビットカーネルが動作している Oracle Solaris システムでは、すべての 64 ビットアプリケーションのスタックがデフォルトで実行不能になります。このパラメータの設定は、32 ビットアプリケーションを実行不能にするために必要です。このパラメータは、noexec_user_stack_log とともに、/etc/system.d ファイルで設定できます。Oracle Solaris 11.3 でのシステムおよび接続されたデバイスのセキュリティー保護 の 悪影響からのプロセスヒープと実行可能スタックの保護を参照してください

データ型

符号付き整数

デフォルト

0 (無効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

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

検証

なし

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

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

コミットレベル

変更の可能性あり