Herokuでクラッシュしたアプリの原因究明と再起動する方法
公開日: 2019.12.1
Herokuに構築したアプリがクラッシュしてページが表示ができなくなった時に、クラッシュの原因を探す方法と、クラッシュしたアプリを再起動する方法をまとめました。
Herokuでアプリがクラッシュした原因を探る
Node.jsなんかで何かのミスでアプリがクラッシュしてしまった時(本当はクラッシュさせちゃダメなんですが)、当たり前ですがHerokuアプリはダウンした状態になります。
アプリがクラッシュした状態でページにアクセスすると「アプリケーションががクラッシュしました(英語)」という画面になっているはずです。
その場合、コマンドラインからHerokuのログを見てみると原因がわかります。
heroku logs --tail
ずらーっと出てくるログをみてみると下記のようなパートがあるはずです。
2019-12-01T11:40:29.693042+00:00 heroku[web.1]: State changed from up to crashed
2019-12-01T11:40:29.671061+00:00 heroku[web.1]: Process exited with status 1
2019-12-01T11:40:39.967302+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=POST path="/" host=xxxxx.xxx request_id=800218af-4ff0-42ea-8916-8f0a96e2112c fwd="111.239.173.247,162.158.6.170" dyno= connect= service= status=503 bytes= protocol=http
大事なのは、「State changed from up to crashed」の部分。つまりアプリの状態をアップからクラッシュに変更したとあります。クラッシュの原因は、この前の部分のログでアプリが吐き出したエラーが出ているので、そこを確認して修正すればOKです。
一応、Herokuの仕様上10分ごとにアプリを再起動するようになっているようですが、
Heroku’s dyno restart policy is to try to restart crashed dynos by spawning new dynos once every ten minutes.
このままだとクラッシュした状態が続いてしまうので、そんなの待ってられない!という場合に、強制的にアプリを再起動する方法を調べてみました。
アプリの強制再起動方法
調べたと言っても、公式ドキュメントに書いてある通りで、Herokuのアプリを再起動させる方法は、以下の4つのパターンがあります。
create a new release by deploying new code
change your config vars
change your add-ons
run heroku restart
翻訳すると、
- 更新を入れて新しいリリースをする
- 環境変数を変更する
- アドオンを変更する
- コマンドラインから「heroku restart」を実行する
ということですね。
先ほどのログでプログラム側に問題があった場合は、修正をしてそのままデプロイすれば良いですし、それ以外の外部要因が問題の場合は、外部要因のエラーを修正して、コマンドラインから「heroku restart」を実行するというのが良さそうです。
ちなみに、コマンドラインで「heroku restart」を実行すると、、、
heroku restart
Restarting dynos on ⬢ アプリ名... done
となって、アプリが再起動されます。簡単ですね。
Herokuでクラッシュしたアプリを再起動する方法をみてきました。わかってしまえば簡単で、
- 「heroku logs --tail」で原因を調べて
- 「heroku restart」で再起動
と覚えておけば良さそうです。
ビルドの時点でわかるエラーであれば、ビルド時に対処ができるのですが、外部要因の場合などクラッシュ状態が続いてしまうので、アプリのステータス確認と、緊急対処をしっかりと用意しておくと良いですね。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
サーバレスの新着記事
サーバレス複数サイト運営をする際の無料サーバー使いこなし術 2022.9.5
サーバレスHerokuの無料プランが終了へ。移行するならどこがいい? 2022.8.26
サーバレスCloudflare Pages Functionsをローカルでテストする方法 2022.8.12
サーバレスCloudfalre Pagesでリダイレクトを使う方法 2022.8.11
サーバレスCloudflare WorkersとCloudflare Pages Functionの違いと使い分け 2022.8.10
サーバレスCloudinaryの自分のデータを自動でバックアップさせる方法 2022.8.1
サーバレスいまさら聞けないレンタルサーバーとHerokuの違い 2022.5.10
サーバレスCloudflare Pagesでアクセス制限を実装する 2022.4.26