セマフォとは - 意味をわかりやすく - 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)