Solaris8 kernel parameter(seminfo_semmsl)

古いシステの環境にOracleインスタンスを追加導入したところ、インスタンスが起動しないとの相談を受ける。セマフォ(seminfo_semmsl)の値を増やす必要があると睨む。


root@miracosta # /usr/sbin/sysdef |grep SEM
650 semaphore identifiers (SEMMNI)
2000 semaphores in system (SEMMNS)
30 undo structures in system (SEMMNU)
1536 max semaphores per id (SEMMSL)
600 max operations per semop call (SEMOPM)
10 max undo entries per process (SEMUME)
32767 semaphore maximum value (SEMVMX)
16384 adjust on exit max value (SEMAEM)


システム全体のセマフォの最大数は


seminfo_semmns(システム全体でのセマフォの最大数) =
seminfo_semmni(システム全体でのセマフォ・セットの最大数) x
seminfo_semmsl(セマフォ・セットあたりの最大数)


と認識しているので、semmnsも併せて増やす。


以下、関連情報を将来のためにメモ。


seminfo_semmns
システム全体でのセマフォの最大数。1つのセマフォ・セットは複数のセマフォ
を持つことができ、それぞれのセマフォにはsem構造体が割り当てられる。
sem構造体のサイズはわずか16バイトであるが、むやみに大きい値にす
べきではない。

seminfo_semmni
システム全体でのセマフォ・セットの最大数。システム内のすべてのセマフォ
セットは、一意の識別子と制御構造体(semid_ds構造体)をもっており、セマフォ
・モジュールの初期化時に、seminfo_semmni個のsemid_ds構造体がカーネル
・メモリから割り当てられる。この制御構造体のサイズは84バイトであり、共有
メモリのshiminfo_shmmniと同様に、むやみに大きな値を設定すべきではない。


セマフォで使用されるカーネルメモリのサイズは以下の計算式で算出可能。


セマフォで使用されるカーネル・メモリ・サイズ=
(seminfo_semmns x (sem構造体のサイズ)) +
(seminfo_semmni x (semid_ds構造体のサイズ)) +
(seminfo_semmni x (kernel mutexのサイズ)) +
(max_nprocs x (undo構造体へのポインタのサイズ)) +
(seminfo_semusz x seminfo_semmnu)


各構造体のサイズは上記で示したとおりで、ポインタおよびintegerは4バイト、
カーネルmutexは8バイト。

最大プロセス数(max_nproc)は、システムのブート時に、実装されている物理
メモリ・サイズから決定される。なお、sysdef(1M)コマンドを使用すれば、動
作中のシステムにおける最大プロセス数を調べることができる。

(例)
root@miracosta # /usr/sbin/sysdef |grep v_proc
30000 maximum number of processes (v.v_proc)

    • seminfo_semuzについて

(sizeof(undo) + (seminfo_semume x sizeof(undo))) =(10+(seminfo_semume x 16))
seminfo_semumeのデフォルト値は10

    • seminfo_semmnuについて

seminfo_semmnuのデフォルト値は30


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

http://docs.sun.com/app/docs/doc/816-3961/6ma74f436?l=ja&a=view