Apache が再起動できない
Apacheを再起動したところ、エラーログを出力して起動出来なくなりました。
[core:emerg] [pid 6004] (28)No space left on device: AH00023: Couldn't create the mpm-accept mutex
かなり焦りました。設定が悪いわけではないのにエラーで起動できないのは困ったものです。
「No space」とのことなので
df コマンドでディスクの空き容量を確認しても問題なし。
free コマンドでメモリの空き容量を見ても特に問題なし。
なのに何度Apacheを起動してもこのエラーが出力されてサービスが上がってこない。
「mpm-accept mutex」が気になるが、直ぐに意味を理解できない。
このサーバはリバースプロキシとして動作させているので被害が大きい。
冗長化させずシングルで動かしていたので
「立ち上がらない」=「サービス停止」
原因調査よりもサービス復旧を優先させる事にしました。まずは、とりあえずの再起動です。その結果、何事もなかったようにApacheが起動し一難が去りました。
原因は何だった?
復旧後、エラーログの「mutex」と記載されていたので、これを手掛かりに調査しました。調べてみると「セマフォが上限値に達してしまった」ことが分かりました。
ミューテックス (mutex)とは排他制御の仕組みで
値に0か1しか取らないセマフォのような仕組み
だそうで、このミューテックスはセマフォのパラメータを利用してOSが制御しているそうです。
エラーログには「mutex」ではなく「semaphore」を記載して欲しいものです。
設定の確認
Apacheユーザのセマフォを確認
# ipcs -s ------ セマフォ配列 -------- キー semid 所有者 権限 nsems 0x00000000 393216 apache 600 1 0x00000000 425985 apache 600 1 0x00000000 458754 apache 600 1 0x00000000 163843 apache 600 1 0x00000000 491524 apache 600 1 0x00000000 524293 apache 600 1 0x00000000 557062 apache 600 1
セマフォの上限値を確認
# /sbin/sysctl -a | grep sem kernel.sem = 250 32000 32 128
これで上限値は128ということになるそうです。
対策を検討する
上限値を上げる事も考えましたが
根本原因では無い
増えてきた事を監視することも考えましたが
Apacheを止めて残っているセマフォを整理する必要がある
結局は
サービス停止が必要になる
値を変更せず、定期的にOSの再起動をすることで様子見にすることにしました。