[ruby] 기본 Heroku 앱을로드하는 데 2 ​​초가 걸리는 이유는 무엇입니까?

서비스를 테스트하기 위해 매우 간단한 Heroku 앱 두 개를 만들었지 만 처음 방문했을 때 페이지를로드하는 데 몇 초가 걸리는 경우가 많습니다.

제가 한 것은 간단한 Sinatra 앱을 만들고 배포하는 것뿐이었습니다. 나는 Heroku 서버를 엉망으로 만들거나 테스트하기 위해 아무것도하지 않았습니다. 응답 시간을 개선하려면 어떻게해야합니까? 지금은 매우 느리고 어디서부터 시작해야할지 모르겠습니다. 프로젝트의 코드는 도움이된다면 github에 있습니다.



답변

  • 애플리케이션이 한동안 사용되지 않으면 서버 메모리에서 언로드됩니다.
  • 첫 번째 히트에서로드되고 아무도 액세스하지 않고 시간이 지날 때까지로드 된 상태로 유지됩니다.

이것은 서버 자원을 절약하기 위해 수행됩니다. 아무도 당신의 앱을 사용하지 않는다면 왜 자원을 바쁘게 유지하고 정말로 필요한 사람이 그것을 사용하지 못하게해야합니까?
앱에 지속적인 트래픽이 많은 경우 언로드되지 않습니다.

이것에 대한 공식적인 메모 가 있습니다.


답변

Varnish 및 Memcached가 포함 된 Heroku에 대한 캐싱 옵션을 조사 할 수도 있습니다. 이들은 다이노 스와는 독립적으로 지속됩니다.

예를 들어 변경되지 않는 홈페이지가있는 경우 응답에 Cache-Control 헤더를 추가하여 Varnish에서 장기간 캐시 할 수 있습니다. 그러면 사용자가 도착했을 때가 아니라 “무언가”를 원할 때까지로드 히트를 경험하지 못할 것입니다.


답변

“확장 성 : Heroku는 어떻게 작동합니까?”에 대한 Tom Robinson의 답변을 확인해야합니다. Quora에서 : http://www.quora.com/Scalability/How-does-Heroku-work

Heroku는 서버 리소스를 다양한 고객 / 애플리케이션으로 나눕니다. 앱에는 컴퓨팅 성능이 할당되어 있습니다. 리소스 수요에 따른 Heroku 파티션. 더 많은 전력을 요구하는 인기있는 애플리케이션이있는 경우 더 많은 ‘dyno'(애플리케이션 컨테이너)에 비용을 지불 한 다음 그 대가로 더 큰 파이를 얻을 수 있습니다.

그러나 귀하의 경우에는 외부인이 방문 / 사용하는 사람이 거의없는 무료 앱을 실행하고 있습니다. 따라서 Heroku는 주소에 대한 요청이있을 때까지 앱을 언로드 (기본적으로 최대 절전 모드로 전환)하여 얻는 리소스를 줄입니다. 이런 일이 발생하고 앱이 오랫동안 유휴 상태 인 경우 다시로드하는 데 시간이 걸립니다.

다시로드 시간이 중요한 경우 앱이 잠들지 않도록 1 개의 dyno를 추가합니다.


답변

나는 같은 문제가 있습니다. 어제 밤에 Rails 3 (1.9.2) 앱을 배포했는데 느립니다. 1.9.2 / Rails 3이 Heroku의 베타 버전이라는 것을 알고 있지만 지원 티켓은 그들이 나에게 보낸 지침을 사용하면 괜찮을 것이라고 말했습니다.

오랜 시간이 지난 첫 번째 요청이 가장 오래 걸린다는 것을 알고 있습니다. 말이된다. 그러나 단순히 DB에 연결되지 않는 페이지를로드하는 데 10 초가 걸리는 경우가 있습니다.

어쨌든, 당신은 내가 할 일을 시도하고 싶을 것입니다. 그것은 내 앱을 프로파일 링하고 로컬로 걸리는 시간을 확인합니다. 400ms가 걸리면 뭔가 잘못된 것입니다. 그러나 로컬에서 50ms를 얻고 Heroku에서 여전히 10 초가 걸리면 뭔가 확실히 잘못된 것입니다.

분명히 캐싱은 도움이되지만 무료로 5MB 만 얻을 수 있으며 한 사람이 사이트를 사용하는 경우 다시 한 번 그렇게 느리지 않아야합니다.


답변