はじめに
WEB開発中に、突如サーバからのレスポンスが返って来なくなりました。
結論から言うと、謎のプロセスがいくつか立ち上がっていて、killして再起動すると無事復旧しました。
備忘録的にまとめておきます。
エラーメッセージ
エラーメッセージは以下の通りです。
504 Gateway Time-out
これは、ただのタイムアウトエラー。解決の糸口になってくれそうにはありません。
WARN Address 0.0.0.0:3005 is already in use.
あとあと気が付いたのですが、このエラーメッセージに、思いっきり答えが書いてました。
3005ポートはすでに使ってますよ的な感じかな。
解決した方法/プロセスkill→サーバ再起動
手順としては、
- プロセスの確認
- 何か動いている
- PID確認
- プロセスをkill
という流れです。
プロセスの確認
$ lsof -i:3005 # 3005はポート番号
3005番は僕の環境のポート番号です。
みなさんの環境ごとに適当な数字に変えてください。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 14475 ec2-user 21u IPv4 26460768 0t0 TCP *:geniuslm (LISTEN)
node 14475 ec2-user 23u IPv4 26464688 0t0 TCP localhost:geniuslm->localhost:46510 (CLOSE_WAIT)
node 14475 ec2-user 24u IPv4 26461490 0t0 TCP localhost:geniuslm->localhost:45830 (CLOSE_WAIT)
node 14475 ec2-user 29u IPv4 26461496 0t0 TCP localhost:geniuslm->localhost:45840 (CLOSE_WAIT)
開発環境がAWSのEC2のため、USERはec2-userになっています。
そして…3005番ポートには、なにやら色々出てます。
(CLOSE_WAIT)
というのがたくさん出ているので、Nuxt.jsのdevelopmentモードで立ち上げていたサーバが、うまく終了できていなかったのか…
この辺は、残念ながらよくわかりませんが、とりあえず意図していないものが動いているのが判明したので、これをkillします。
PID確認
killするには、PIDを確認しておく必要があります。
そのまま、さっきの画面で確認できます。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 14475 ec2-user 21u IPv4 26460768 0t0 TCP *:geniuslm (LISTEN)
node 14475 ec2-user 23u IPv4 26464688 0t0 TCP localhost:geniuslm->localhost:46510 (CLOSE_WAIT)
node 14475 ec2-user 24u IPv4 26461490 0t0 TCP localhost:geniuslm->localhost:45830 (CLOSE_WAIT)
node 14475 ec2-user 29u IPv4 26461496 0t0 TCP localhost:geniuslm->localhost:45840 (CLOSE_WAIT)
この結果から、PIDが14475
だと分かります。
kill作業
コマンドは
$ kill -9 14475
-9
は強制的にkillするためのパラメータだそうです。
ちなみに、一度-9
なしで実行してみたのですが、プロセスがkillできていませんでした。
再度、確認のために、
$ lsof -i:3005 # 3005はポート番号
を打ってみるも、結果は何も出ず。
うまく、killできたようです。
サーバの再起動
あとは安心して、サーバを起動させます。
ちなみに僕は、
$ yarn dev --port 3005
で、Nuxt.jsのdevelopmentモードでサーバを立ち上げています。
今回はこれで、無事ブラウザにアプリが描画されました。
まとめ
- サーバからのレスポンスがめっちゃ遅い場合、ポートを他のプロセスで使ってしまっている可能性がある
- プロセスの確認は
$ lsof -i:{ポート番号}
- PIDを確認して、不要であればプロセスをkill
- killするには
$ kill -9 {PIDを入力}
さいごに
ろくに解説もできておらず、申し訳ないですが、せめてうまくいったことだけでも、共有させて頂いております。
最後までありがとうございました。