LoginSignup
2
1

More than 3 years have passed since last update.

herokuがsleep状態に入ってしまってレスポンスが遅い問題をnewRelicでpingを送ることで解決

Last updated at Posted at 2021-01-10

はじめに

個人サイトの運用でstrapiというHeadlessCMSをherokuサーバで動かしていたら、レスポンスが20秒ほどかかってデータが中々取得できない問題に遭遇した。
herokuサーバ(dyno)の無料プランだと30分間リクエストがない場合にsleep状態に入ってしまうので、sleep→サーバ再起動→strapi起動という流れになってたのが原因。
newRelicの無料アドオンを使って15分おきにpingを送ることで問題を回避できたので、その備忘録を書いておく。
このブログがとても参考になった。Heroku Free DynoのSleepを防止する

herokuのログをみて原因調査

最初はそもそもなんでherokuがこんなに遅いのかわからなかったが下記の記事が参考になった。
Herokuって本当に遅いんですか?

dynoがsleepしているのでは?!??!!?
Free Dyno Hours - Dyno sleeping

web dynoは30分以上トラフィックがないとsleepしてしまうんですが、これが起きるのが結構時間かかるんですね。
30分感覚で眠らないようにアクセスしてあげるみたいなのやってる人もいますが、どうしても無料でやりたかったらそれもあり。

実際にherokuのログを見ることでこの休眠現象を確認できる。

$ heroku log -t
2021-01-10T09:27:01.218869+00:00 heroku[router]: at=info method=POST path="/graphql" host=strapi-asakawa-family.herokuapp.com request_id=7a6e142f-4ce7-4176-b237-d2032efe8722 fwd="60.73.16.105" dyno=web.1 connect=1ms service=81ms status=200 bytes=1247 protocol=https
2021-01-10T09:27:01.216416+00:00 app[web.1]: [2021-01-10T09:27:01.216Z] debug POST /graphql (75 ms) 200
2021-01-10T09:27:01.248257+00:00 app[web.1]: [2021-01-10T09:27:01.248Z] debug POST /graphql (86 ms) 200
2021-01-10T10:01:18.451053+00:00 heroku[web.1]: Idling
2021-01-10T10:01:18.452808+00:00 heroku[web.1]: State changed from up to down
2021-01-10T10:01:19.964249+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2021-01-10T10:01:20.136459+00:00 heroku[web.1]: Process exited with status 143

strapiのgraphqlのエンドポイントにpostリクエストを送ってから30分待ってみたら、全プロセスが停止して休眠状態に入るのが確認できた。
その後リクエストがくると、サーバ再起動→strapi起動→yarn build完了→レスポンス返すって感じなので20秒ぐらいかかる。

newRelicアドオンの追加

個人サイト用だからアクセスも全然無いし、これを回避するために定期的にpingを打つことにした。
まずnewRelicのアドオンをherokuのアプリに追加する。

# newRelicアドオン追加コマンド
$ heroku addons:add newrelic:wayne -a { heroku_app_name }

newRelicのアカウント新規作成

newRelicのアカウントが無い場合は新規に作る。

下記リンクからnewRelicに登録。
https://newrelic.com/signup

Free access to all of New Relic. Forever.
No credit card required.

無料プランで使えるのでクレカも必要ない。

pingの送信設定

New Relic Syntheticsを選択。
そこで新規モニターを作成。

screencapture-one-newrelic-launcher-synthetics-nerdlets-home-2021-01-10-19_47_03-2.png

herokuのログにリクエストが出てればおk。
データ取得に20秒かかる地獄のような問題が解決した。

参考文献

2
1
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
2
1