受託開発しているサイトを乗せたGCEインスタンスのスペックが足りなくなったということで、一度インスタンスをシャットダウンしてスペックアップ→再起動したところなぜかApacheが起動してくれない。
さあ困った!どうしよう!ということで試したこと&解決方法メモ。
#まず結論
$ which fuser
fuserが叩けるか確認して、インストールされてなければ
$ sudo apt-get install psmisc
これでfuserコマンドを使えるようにしたあと(必要に応じてyumと読み替えてください)、
$ sudo fuser -k -n -tcp 80
をひたすら連打。10回くらいやったらなんもメッセージが返ってこなくなったら適当にhttpdをrestart。で治った。
#環境と現象
LAMP Certified by BitnamiをデプロイしたGCEインスタンス。CentOS 7の至って普通なLAMP環境です。
Apache2でLaravel製のサイトを動かしてたところ、アクセス数増加に伴ってちょっと重くなる頻度が増えてきた。GCPのモニタリングでも割と高めの使用率で張り付くことが多いと分かったので、スペックを上げることに決定。
もともとCPU 1Core, RAM 1.7GB, ROM 10GBだったのを新しくCPU 2Core, RAM 7.5GB, ROM 20GBにしてサーバー再起動しようとしたところ、httpdが立ち上がってこない。スペック低すぎとかは言わんといて。
#やったこと
まずスペック上げたことが原因か?と思ったものの、逆に落としたわけでもないので首をかしげながら念のため各種設定確認。MySQLもPHPも正常に動作してるし、きちんとストレージもマウントされてる。
そして、このタイミングでApacheの動作がおかしいと判明。restartかけようとすると
$ sudo /opt/bitnami/ctlscript.sh restart apache
(98)Address already in use: AH00073: make_sock: unable to listen for connections on address [::]:80
(98)Address already in use: AH00073: make_sock: unable to listen for connections on address 0.0.0.0:80
こんなメッセージで怒られてApacheが起動できない。
なるほどこれは他のプロセスが80番ポートを塞いでるのだということで、愚直に
$ sudo netstat -ltnp | grep ':80'
を叩くと、
tcp6 0 0 :::80 :::* LISTEN 8833/apache2
と出てくるので、やはり愚直に
$ sudo kill -9 8833
でプロセスをキル。よしこれで解決だ……と思い再度httpdをrestartさせようとすると
$ sudo /opt/bitnami/ctlscript.sh restart apache
(98)Address already in use: AH00073: make_sock: unable to listen for connections on address [::]:80
(98)Address already in use: AH00073: make_sock: unable to listen for connections on address 0.0.0.0:80
やはり怒られる。あれぇぇ!?
再度netstatを叩いてみると、やはり謎にapache2のプロセスが動いている。もしやこれは起動に失敗して多重プロセスになってるやつでは……と思い立ち、他に方法も思いつかなかったので
$ sudo fuser -k -n -tcp 80
をひたすら叩きまくっていく。すると途中からメッセージが返ってこなくなったので、満を持してrestart。
$ sudo /opt/bitnami/ctlscript.sh restart apache
Unmonitored apache
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : apache not running
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : httpd started at port 80
Monitored apache
よし通った!
ということで無事にhttpd起動、ブラウザからのアクセスも確認。めでたしめでたし。さすがに冷や汗かいたけど……
#おわりに
正直原因がなんなのかは全く分かってないですが、とりあえず解決したので何より。まあWebサーバーなんてせいぜい月イチで再起動かければ多いほうなので、いいっちゃいいんですが。
冗長化っぽいことを何もしてない小規模のサイト運用なので、こういう些細なトラブルが出てきたときヒヤっとしますね。ということで他の方のヒヤリハット防止も兼ねた備忘録でした。おしまい。