Apacheの起動ができなくなる「[core:emerg] [pid 5950] (28)No space left on device: AH00023: Couldn’t create the proxy mutex」

Apacheの起動ができなくなる「[core:emerg] [pid 5950] (28)No space left on device: AH00023: Couldn’t create the proxy mutex」

Apacheの再起動を行ったところ、以下のエラーで起動ができなくなったときの作業記録です。

「No space left on device: AH00023: Couldn’t create the proxy mutex」と出ており、ディスクフルを疑いましたがdfコマンドで確認しても問題なし。

原因は、セマフォの上限でした。

[Fri Nov 18 10:50:47.319123 2022] [suexec:notice] [pid 5950] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Nov 18 10:50:47.571429 2022] [ssl:warn] [pid 5950] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Fri Nov 18 10:50:48.228680 2022] [core:emerg] [pid 5950] (28)No space left on device: AH00023: Couldn't create the proxy mutex 
[Fri Nov 18 10:50:48.228731 2022] [proxy:crit] [pid 5950] (28)No space left on device: AH02478: failed to create proxy mutex
[Fri Nov 18 10:50:48.228740 2022] [:emerg] [pid 5950] AH00020: Configuration Failed, exiting

原因の確認

セマフォの上限に達しているかは以下のように確認します。

■セマフォの使用状況を確認(apacheユーザーのセマフォがあることを確認)

[root@localhost ~/]# ipcs -s
------ セマフォ配列 --------
キー     semid      所有者  権限     nsems     
0x00000000 884736     apache     600        1         
0x00000000 884737     apache     600        1         
0x00000000 884738     apache     600        1         
0x00000000 884739     apache     600        1         
0x00000000 884740     apache     600        1         
0x00000000 917509     apache     600        1         
0x00000000 393222     apache     600        1         
0x00000000 393223     apache     600        1         
0x00000000 393224     apache     600        1         
0x00000000 393225     apache     600        1         
0x00000000 393226     apache     600        1         
...

上記のように、apacheが大量に出力されており、上限に達したものと思われます。

対応 セマフォを削除

セマフォの使用状況からsemidを使用してセマフォを削除する場合は、以下のコマンドを実行します。

ipcrm -s <semid>

プロセスが異常終了して解放されていないセマフォを消すことができます。
作業はrootユーザーで行えば全てを操作することができます。
一般ユーザの場合は、現在使用しているユーザのみ対象となります。

apacheのセマフォを削除する場合は、以下のようにコマンドを実行することで削除することができます。

for i in `ipcs -s | awk '/apache/ {print $2}'`; do (ipcrm -s $i); done