heroku가 sleep 상태에 들어가 버려 응답이 느린 문제를 newRelic로 ping을 보내는 것으로 해결
소개
개인 사이트의 운용으로 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 엔드포인트에 포스트 요청을 보내고 나서 30분 기다려 보면, 모든 프로세스가 정지해 휴면 상태에 들어가는 것을 확인할 수 있었다.
그 후 요구가 오면, 서버 재기동→strapi 기동→yarn build 완료→응답 되돌린다고 느끼므로 20초 정도 걸린다.
newRelic 애드온 추가
개인 사이트용이기 때문에 액세스도 전혀 없고, 이를 회피하기 위해 정기적으로 ping을 치기로 했다.
먼저 newRelic의 추가 기능을 heroku 앱에 추가합니다.
# newRelicアドオン追加コマンド
$ heroku addons:add newrelic:wayne -a { heroku_app_name }
newRelic 계정 새로 만들기
newRelic의 계정이 없는 경우는 신규로 만든다.
아래 링크에서 newRelic에 등록.
h tps : // 네 w ぃ c. 코 m/시그누 p
Free access to all of New Relic. Forever.
No credit card required.
무료 플랜으로 사용할 수 있으므로 클레카도 필요 없다.
핑 전송 설정
New Relic Synthetics를 선택합니다.
그래서 신규 모니터를 작성.
heroku의 로그에 요청이 나오면 k.
데이터 취득에 20초가 걸리는 지옥과 같은 문제가 해결되었다.
참고문헌
처음에는 원래 어째서 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 엔드포인트에 포스트 요청을 보내고 나서 30분 기다려 보면, 모든 프로세스가 정지해 휴면 상태에 들어가는 것을 확인할 수 있었다.
그 후 요구가 오면, 서버 재기동→strapi 기동→yarn build 완료→응답 되돌린다고 느끼므로 20초 정도 걸린다.
newRelic 애드온 추가
개인 사이트용이기 때문에 액세스도 전혀 없고, 이를 회피하기 위해 정기적으로 ping을 치기로 했다.
먼저 newRelic의 추가 기능을 heroku 앱에 추가합니다.
# newRelicアドオン追加コマンド
$ heroku addons:add newrelic:wayne -a { heroku_app_name }
newRelic 계정 새로 만들기
newRelic의 계정이 없는 경우는 신규로 만든다.
아래 링크에서 newRelic에 등록.
h tps : // 네 w ぃ c. 코 m/시그누 p
Free access to all of New Relic. Forever.
No credit card required.
무료 플랜으로 사용할 수 있으므로 클레카도 필요 없다.
핑 전송 설정
New Relic Synthetics를 선택합니다.
그래서 신규 모니터를 작성.
heroku의 로그에 요청이 나오면 k.
데이터 취득에 20초가 걸리는 지옥과 같은 문제가 해결되었다.
참고문헌
# newRelicアドオン追加コマンド
$ heroku addons:add newrelic:wayne -a { heroku_app_name }
newRelic의 계정이 없는 경우는 신규로 만든다.
아래 링크에서 newRelic에 등록.
h tps : // 네 w ぃ c. 코 m/시그누 p
Free access to all of New Relic. Forever.
No credit card required.
무료 플랜으로 사용할 수 있으므로 클레카도 필요 없다.
핑 전송 설정
New Relic Synthetics를 선택합니다.
그래서 신규 모니터를 작성.
heroku의 로그에 요청이 나오면 k.
데이터 취득에 20초가 걸리는 지옥과 같은 문제가 해결되었다.
참고문헌
Reference
이 문제에 관하여(heroku가 sleep 상태에 들어가 버려 응답이 느린 문제를 newRelic로 ping을 보내는 것으로 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/H-Asakawa/items/4b0df400e1c3ff7785b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)