2010-04-09 95 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通过卸载应用程序来削减您获得的资源 - 将其实质上置于休眠状态 - 直到您的地址发出请求。当发生这种情况,并且您的应用程序长时间闲置时,重新加载需要时间。

如果重新加载时间很重要,请添加一个额外的动态码以防止应用程序进入睡眠状态。

相关问题