Apache が起動しない - Address already in use: make_sock: could not bind to address
DB サーバーの負荷が異常に高い状態が数日続いていることに気がついたので、サーバーにログインして調べてみたら以下のような状態に。
# top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16103 apache 25 0 33688 4276 1268 R 32.7 0.1 1106:33 perl
16098 apache 25 0 33688 4280 1268 R 29.8 0.1 1106:27 perl
16107 apache 25 0 33688 4280 1268 R 26.8 0.1 1106:25 perl
・
・
・
DB サーバーなのに apache ユーザーで perl が叩かれてそれが合計で 100% 近く消費している状態。
一応、phpMyAdmin 用に Apache が動いているので、http経由で Perl のスクリプトか何かが叩かれてるんだろうと。
まぁ、サービスに影響ない部分なので、とりあえず Apache を再起動しようかなぁっと思い、実行すると変なエラーが・・・
で、何度起動使用しても Apache が立ち上がらない状態に。
何となく、上記の3つの perl 絡みのプロセスが悪さしているようだったので、それらのプロセスを kill。
案の定、終了してくれないので強制終了。
で、再度 Apache を起動するも、先ほどと同じエラーで起動できず・・・
メッセージの内容からポート 80が使えない的な感じ。
どうやら、ポート 80を利用しているプロセスが残っているのが原因のようなので、lsof コマンドでポート 80 を使っているプロセスを調べてみると・・・
# lsof -i :80
httpd 14817 apache 4u IPv6 9590 TCP *:http (LISTEN)
・
・
(中略)
・
・
httpd 15937 apache 4u IPv6 9590 TCP *:http (LISTEN)
perl 16092 apache 4u IPv6 9590 TCP *:http (LISTEN)
httpd 16567 apache 4u IPv6 9590 TCP *:http (LISTEN)
・
・
(中略)
・
・
httpd 16716 apache 4u IPv6 9590 TCP *:http (LISTEN)
50個くらい出てきました・・・
ということで、こいつらを終了します。
# kill 14817
・
・
(中略)
・
・
# kill 16716
が、lsofを再実行するとまだ残ってる。
# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 16092 apache 4u IPv6 9590 TCP *:http (LISTEN)
最初に終了した perl の残骸・・・
強制終了します。
これで 80 を使ってる全てのプロセスが終了しました。
っという事で、Apache を起動。
# service httpd start
httpd を起動中: [ OK ]
やっと問題なく起動できました。
原因は良く分からなかったんですが、無事に CPU 負荷も下がり普段の状態に戻りました。
うーん、なんだろうなぁ?
コメント