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

时间:2010-04-09 09:12:01

标签: ruby performance heroku

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

我所做的就是创建一个简单的Sinatra应用程序并进行部署。我没有做任何事情来捣乱或测试Heroku服务器。我该怎么做才能缩短响应时间?它现在非常慢,我不知道从哪里开始。如果有帮助的话,项目的代码在github上。

5 个答案:

答案 0 :(得分:158)

  • 如果您的应用程序暂时未使用,则会从服务器内存中卸载。
  • 在第一次点击时,它会被加载并保持加载状态,直到一段时间过去而没有任何人访问它。

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

official note这个。

答案 1 :(得分:14)

您可能还想调查Heroku w / Varnish和Memcached上的缓存选项。这些是独立于动态的持久性。

例如,如果您有一个不变的主页,则可以通过向响应中添加Cache-Control标头,在Varnish中长时间缓存该主页。然后,您的用户在他们想要“做某事”而不是他们到达之前不会遇到负载。

答案 2 :(得分:3)

我遇到了同样的问题。我昨晚部署了一个Rails 3(1.9.2)应用程序,速度很慢。我知道1.9.2 / Rails 3是在Heroku的BETA中,但是支持票据表示使用他们发给我的一些说明应该没问题。

据我所知,很长一段时间后的第一次请求时间最长。说得通。但是,简单地加载甚至连接到数据库的页面有时需要10秒钟。这很糟糕。

无论如何,你可能想尝试我要做的事情。这是我的应用程序的配置文件,看看在本地需要多长时间。如果它需要400毫秒,那么问题就出错了。但是如果我在本地获得50ms并且在Heroku上仍然需要10秒,那么肯定是错误的。

显然,缓存有帮助,但你只能免费获得5MB,而且只有一个人使用该网站,它应该不会那么慢。

答案 3 :(得分:2)

你应该查看Tom Robinson对"可伸缩性的回答:Heroku如何工作?"在Quora上:http://www.quora.com/Scalability/How-does-Heroku-work

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

在你的情况下,你正在运行一个免费的应用程序,很少有人 - 如果你有任何人 - 正在访问/使用。因此,Heroku通过卸载您的应用程序来减少您获得的资源 - 实际上将其置于休眠状态 - 直到向您的地址发出请求为止。当这种情况发生时,你的应用程序已经闲置了很长时间,重新加载需要时间。

如果重新加载时间很重要,请添加1个额外的dyno以防止您的应用程序入睡。

答案 4 :(得分:1)

我通过heroku的免费帐户安装的每个应用程序都存在相同的问题。现在,有一些选项可以添加dynos,以使您的应用在不使用一段时间后不会被卸载,您也可以尝试使用redis或memcached进行缓存。但是我为我的小型项目使用了一个hacky解决方案,我基本上构建了web scraper,将其置于睡眠和tada的无限循环内,该网站实际上具有更好的响应时间(我想由于脚本的缘故,它并没有卸载)。 / p>