2010-04-09 86 views
90

我創建了兩個非常簡單的Heroku應用程序來測試該服務,但它往往需要幾秒鐘加載頁面時,我第一次訪問他們:爲什麼我的基本Heroku應用需要兩秒鐘才能加載?

我所做的只是創建一個簡單的應用程序西納特拉和部署。我沒有做任何事情來搞亂或測試Heroku服務器。我能做些什麼來縮短響應時間?現在速度很慢,我不確定從哪裏開始。如果有幫助,這些項目的代碼在github上。

回答

147
  • 如果您的應用程序在一段時間內未使用,它會從服務器內存中卸載。
  • 第一次點擊時,它會被加載並保持加載狀態,直到有一段時間沒有任何人訪問它。

這樣做是爲了節省服務器資源。如果沒有人使用你的應用程序,爲什麼要讓資源忙碌,而不是讓真正需要的人使用它們?
如果你的應用有很多連續的流量,它將永遠不會被卸載。

這裏有一個official note

+2

這樣做是爲了讓服務器可以擁有一些可用內存,如果其他應用程序需要它。其次,如果服務器一直在運行,那麼使用應用程序來重載服務器是相當容易的。有很多原因。 Clyfe指出它的簡單版本。 – 2010-04-09 09:24:09

+0

是否在文檔的某處?在沒有使用後多久會發生?謝謝你的答案,這使事情更清晰:)。 – 2010-04-09 09:25:00

+0

我認爲這是一個乘客行爲 – shingara 2010-04-09 09:38:25

14

您可能還想調查一下Heroku w/Varnish和Memcached上的緩存選項。這些堅持獨立於dynos。

例如,如果您擁有不變的主頁,則可以通過將Cache-Control標頭添加到響應中,將其緩存在Varnish中。然後,您的用戶將不會體驗到負載衝擊,直到他們想要「做某事」而不是抵達時。

3

我有同樣的問題。我昨晚部署了Rails 3(1.9.2)應用程序,速度很慢。我知道1.9.2/Rails 3在Heroku的測試版中,但支持票據說它應該沒問題,使用他們發給我的一些指令。

據我所知,長時間後的第一個請求花費的時間最長。說得通。但簡單地加載甚至連10秒鐘連接到DB的頁面都非常糟糕。

無論如何,你可能想試試我要做的事情。這是配置我的應用程序,看看需要多長時間在本地。如果這需要400毫秒,那麼有些事情是錯誤的。但是,如果我在本地獲得50ms的時間,而Heroku仍然需要10秒鐘,那麼肯定是錯誤的。

顯然,高速緩存有助於您獲得5MB的免費空間,並且一次使用本站的用戶就不會那麼慢。

2

您應該查看Tom Robinson對「可擴展性:Heroku如何工作?」的回答。在Quora上:http://www.quora.com/Scalability/How-does-Heroku-work

Heroku將服務器資源劃分爲許多不同的客戶/應用程序。你的應用程序被分配了計算能力塊。 Heroku基於資源需求進行分區。當你有一個需要更多權力的流行應用程序時,你可以支付更多的「dynos」(應用程序容器),然後獲得更大的餅圖。

就你而言,你正在運行一個免費的應用程序,很少有人 - 如果你有任何 - 你正在訪問/使用。因此,Heroku通過卸載應用程序來削減您獲得的資源 - 將其實質上置於休眠狀態 - 直到您的地址發出請求。當發生這種情況,並且您的應用程序長時間閒置時,重新加載需要時間。

如果重新加載時間很重要,請添加一個額外的動態碼以防止應用程序進入睡眠狀態。

相關問題