1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[インフラ]サーバに繋がらずタイムアウトしてしまう現象に、プロセスをkillしてサーバを再起動して復旧した話

Last updated at Posted at 2019-07-05

はじめに

WEB開発中に、突如サーバからのレスポンスが返って来なくなりました。
結論から言うと、謎のプロセスがいくつか立ち上がっていて、killして再起動すると無事復旧しました。
備忘録的にまとめておきます。

エラーメッセージ

エラーメッセージは以下の通りです。

504 Gateway Time-out

これは、ただのタイムアウトエラー。解決の糸口になってくれそうにはありません。

WARN  Address 0.0.0.0:3005 is already in use. 

あとあと気が付いたのですが、このエラーメッセージに、思いっきり答えが書いてました。
3005ポートはすでに使ってますよ的な感じかな。

解決した方法/プロセスkill→サーバ再起動

手順としては、

  1. プロセスの確認
  2. 何か動いている
  3. PID確認
  4. プロセスを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コマンド
$ 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を入力}

さいごに

ろくに解説もできておらず、申し訳ないですが、せめてうまくいったことだけでも、共有させて頂いております。
最後までありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?