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


100

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

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

답변:


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

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

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


51
이 문제를 해결하는 가장 쉬운 방법은 다이노를 2로 늘리는 것입니다.
Chap

5
@diegopau 필요한 것을 정확히 수행 하는 멋진 앱 ( wekkars.com )을 찾았습니다 . 현재로서는 베타 버전 인 것 같지만 여기서 완벽하게 작동합니다.
SteenhouwerD

68
유휴 상태를 유지하기 위해 서버를 핑 (ping)하는 것은 자신의 둥지에서 엉망이됩니다. 귀하가 말하는 이러한 서비스는 무료 입니다. 그들은 자원을 보존해야합니다. 모든 사람이 자신의 서버를 핑하면 아무도 교체되지 않으며 공급자는 확장해야합니다. 그것은 돈이 든다 .... 안녕 무료 서비스. 나는이 답변의 포스터가 서버에 핑 제안을 삭제해야한다고 생각합니다.
GreenAsJade

32
저는 uptimerobot.com을 사용하여 5 분마다 무료로 Heroku 앱을 핑합니다. 200OK (그리고 더 중요하지 않을 때 더 중요 함)가 있다고 알려주고 앱이 계속 반응합니다. 나는 이것에 대해 사과하지 않습니다. 10 개의 heroku 앱이 있는데 대부분은 개발 또는 데모 앱이지만이 앱은 특히 라이브 / 프로덕션이며 트래픽이 적음에도 불구하고 요청시 신속하게 응답해야합니다. 이것이 Heroku의 비즈니스 모델에 위협이된다면 그들은 우리를 막을 것입니다. 수천 명의 글로벌 사용자가있을 때 다른 다이노를 가동하고 훌륭한 서비스에 대한 비용을 지불하기 시작합니다. 그러니 죄책감은 그만둬! :)
ED-209

3
나는 Tokn과 함께 있습니다. 사이트가 너무 느리게로드되어 시작되기 전에 떠나는 경우 새 앱은 어떻게 사용자를 확보해야합니까?
Deborah

14

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

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


4

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

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

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

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


3

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.