セマフォとは - 意味をわかりやすく - IT用語辞典 e-Words セマフォはコンピュータ上の共有資源について、利用可能な資源の数を指し示している。プログラムが資源を占有するときはセマフォの値から1を減じ、処理が終わって解放する際には1を加える。セマフォが0のときは空いている資源がないため正の値になるまで待機する。セマフォの値を同じ資源に同時にアクセスできるプロセスの数として扱う場合もある。

排他制御のための仕組み

Linux上でセマフォの数を確認する

ipcs -s

$ ipcs -s 
 
------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x0052e2c1 0          postgres  600        17        
0x0052e2c2 32769      postgres  600        17        
0x0052e2c3 65538      postgres  600        17        
0x0052e2c4 98307      postgres  600        17        
0x0052e2c5 131076     postgres  600        17        
0x0052e2c6 163845     postgres  600        17        
0x0052e2c7 196614     postgres  600        17        
0x00000000 629047303  apache    600        1         
0x036c6761 588447766  root      600        17        
0x036c6762 588480535  root      600        17

削除 ipcrm -s <semid>

$ ipcrm -s 588447766
$ ipcs -s | grep 588447766
=> 削除される

上限

デフォルトの上限は120 sysctl -a で確認できる

$ /sbin/sysctl -a | grep semid
kernel.sem = 250        32000   32      128

Apacheがセマフォ不足で起動しないことがある。 No space left on device というエラーが出るのでミスリーディングだが、セマフォを減らしてやることで起動できるようになる

セマフォ不足でApacheが起動できないときセマフォをまとめて削除する - M.C.P.C. (Mamesibori Creation Plus Communication)