为什么我的基本Heroku应用程序需要两秒钟才能加载?


100

我创建了两个非常简单的Heroku应用程序来测试该服务,但是当我第一次访问它们时,通常需要花费几秒钟来加载页面:

我所做的就是创建一个简单的Sinatra应用程序并进行部署。我没有做任何事情来弄乱或测试Heroku服务器。我该如何改善响应时间?现在非常慢,我不确定从哪里开始。如果有帮助,这些项目的代码位于github上。

Answers:


175
  • 如果您的应用程序一段时间未使用(从服务器内存中),则将其卸载。
  • 第一次命中时,它将加载并保持加载状态,直到一段时间之后,没有任何人访问它。

这样做是为了节省服务器资源。如果没有人使用您的应用程序,为什么要保持资源繁忙而不让真正需要它的人使用它们?
如果您的应用有大量持续的流量,则永远不会卸载它。

对此有正式说明


51
解决这个问题的最简单的方法就是增加你的DYNOS为2

5
@diegopau我找到了一个很好的应用程序(wekkars.com),它完全可以满足您的需求。目前,它似乎处于测试阶段,但在这里可以正常使用。
SteenhouwerD 2012年

68
对您的服务器执行Ping操作以防止其处于空闲状态,这是在您自己的嵌套中进行崩溃。您正在谈论的这些服务是免费的。他们需要节省资源。如果每个人都对服务器执行ping操作,则任何服务器都不会被交换出去,并且提供商必须扩大规模。那要花钱。...再见免费服务。我认为此答案的发布者应删除对ping服务器的建议。
GreenAsJade 2012年

32
我使用uptimerobot.com每5分钟免费ping我的Heroku应用程序-它告诉我我有200OK(更重要的是,当我没有时),它使该应用程序保持响应。我对此不表示歉意;我有10个heroku应用程序,其中大多数是开发或演示应用程序,但是这个特别是实时/生产应用,尽管流量很低,但需要在请求时迅速做出响应。如果这对Heroku的商业模式构成威胁,那么他们将阻止我们这样做。当我拥有成千上万的全球用户时,我将使用另一种测功机,并开始为出色的服务付费。因此,请不要因为内the而已!:)
ED-209

3
我和Tokn在一起。如果网站加载速度如此之慢,以至于他们在网站启动之前就离开,那么新的应用程序应该如何吸引用户呢?
Deborah

14

您可能还想研究Heroku w / Varnish和Memcached上的缓存选项。这些独立于测功器而持久存在。

例如,如果您的主页保持不变,则可以通过在响应中添加Cache-Control标头来将其缓存在Varnish中更长时间。然后,您的用户只有在要“做某事”而不是到达时才经历负载冲击。


4

您应该查看汤姆·罗宾逊(Tom Robinson)对“可伸缩性:Heroku如何工作?”的回答。在Quora上:http//www.quora.com/Scalability/How-does-Heroku-work

Heroku在许多不同的客户/应用程序之间分配服务器资源。您的应用分配了计算能力。Heroku根据资源需求进行分区。当您拥有一个需要更多功能的流行应用程序时,您可以支付更多的“ dynos”(应用程序容器),然后获得更大的回报。

但是,就您而言,您正在运行一个免费的应用程序,很少有人(如果您自己在外面)正在访问/使用。因此,Heroku会通过卸载应用程序来减少所获得的资源-实质上将其置于休眠状态-直到对您的地址提出请求为止。如果发生这种情况,并且您的应用已经闲置了很长时间,那么重新加载就需要花费一些时间。

如果重新加载时间很重要,则额外增加1个dyno可使您的应用程序入睡。


3

我有同样的问题。昨晚我部署了Rails 3(1.9.2)应用程序,而且运行缓慢。我知道1.9.2 / Rails 3在Heroku的BETA中,但是支持票证说应该可以按照他们发送给我的一些说明进行操作。

我了解很长一段时间后的第一个请求会花费最长的时间。说得通。但是有时仅加载甚至连10秒都没有连接到数据库的页面都是很糟糕的。

无论如何,您可能想尝试一下我要做的事情。那就是配置我的应用程序,并查看在本地花费多长时间。如果要花费400毫秒,则出问题了。但是,如果我在本地获得50毫秒的时间,但在Heroku上仍然需要10秒钟,那么肯定有问题。

显然,缓存可以帮助您,但您只能免费获得5MB内存,而且只要有一个人使用该站点,它就不会那么慢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.