状況確認
EC2上で稼働していたhttpdがある日突然起動に失敗した。
エラーログdefault:/var/log/httpd/error_log
を確認のところ、次の一文が確認された
No space left on device: AH00023: Couldn't create the watchdog-callback mutex
検索すると、ログローテーション時にセマフォを使い切っていて起動できなかった模様。
現在のセマフォ状況はipcs -s
コマンドで確認できる
[root@test-server]# ipcs -s
------ セマフォ配列 --------
キー semid 所有者 権限 nsems
0x00000000 48365568 apache 600 1
0x00000000 48398337 apache 600 1
0x00000000 48431106 apache 600 1
0x00000000 48463875 apache 600 1
0x00000000 48496644 apache 600 1
0x00000000 48529414 apache 600 1
セマフォの上限はsysctl -a
コマンドで確認できる
[root@test-server]# /sbin/sysctl -a | grep sem
kernel.sem = 250 32000 32 128
おそらくセマフォの識別子数が128で、ipcsコマンドの結果が128行に達すると起動に失敗する。
初期対応
service httpd restart
でセマフォ数は減って起動するようになったが、翌日また増えている。
どうやらservice httpd graceful
コマンドだったりログローテーションの場合のみ、セマフォが増え続ける模様
調査
以下確認のところ、Apache/2.4.25で発生するバグであった模様
http://forum.directadmin.com/showthread.php?t=54265
https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x/CHANGES
恒久対応
バージョン確認すると、ばっちり該当した
[root@test-server]# httpd -v
Server version: Apache/2.4.25 (Amazon)
Server built: Jan 19 2017 16:55:49
yum update httpd
で2.4.27にアップデートし、問題が解消されたことを確認した