サーバレスのサムネイル

サーバレス

Herokuでクラッシュしたアプリの原因究明と再起動する方法

公開日: 2019.12.1

Herokuに構築したアプリがクラッシュしてページが表示ができなくなった時に、クラッシュの原因を探す方法と、クラッシュしたアプリを再起動する方法をまとめました。

編集ノート:SERVERSUSでは、パートナーリンクからコミッションを得ています。コミッションが記事の意見や、サービスの評価に影響を与えることはありません。

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.

Dynos and the Dyno Manager | Heroku

このままだとクラッシュした状態が続いてしまうので、そんなの待ってられない!という場合に、強制的にアプリを再起動する方法を調べてみました。

アプリの強制再起動方法

調べたと言っても、公式ドキュメントに書いてある通りで、Herokuのアプリを再起動させる方法は、以下の4つのパターンがあります。

create a new release by deploying new code
change your config vars
change your add-ons
run heroku restart

Dynos and the Dyno Manager | Heroku

翻訳すると、

  • 更新を入れて新しいリリースをする
  • 環境変数を変更する
  • アドオンを変更する
  • コマンドラインから「heroku restart」を実行する

ということですね。

先ほどのログでプログラム側に問題があった場合は、修正をしてそのままデプロイすれば良いですし、それ以外の外部要因が問題の場合は、外部要因のエラーを修正して、コマンドラインから「heroku restart」を実行するというのが良さそうです。

ちなみに、コマンドラインで「heroku restart」を実行すると、、、

heroku restart

Restarting dynos on ⬢ アプリ名... done

となって、アプリが再起動されます。簡単ですね。


Herokuでクラッシュしたアプリを再起動する方法をみてきました。わかってしまえば簡単で、

  • 「heroku logs --tail」で原因を調べて
  • 「heroku restart」で再起動

と覚えておけば良さそうです。

ビルドの時点でわかるエラーであれば、ビルド時に対処ができるのですが、外部要因の場合などクラッシュ状態が続いてしまうので、アプリのステータス確認と、緊急対処をしっかりと用意しておくと良いですね。


価格は記載がある場合を除き、すべて税込みです。

関連キーワード

サーバレスの新着記事