【发布时间】:2012-07-04 21:22:19
【问题描述】:
我有一个非常简单的 rails 3.2.6 应用程序。我多年来一直使用 Heroku 来托管原型,始终处于免费层。我终于在我的最新应用上添加了一个付费测功机,并添加了 New Relic 来监控性能。
我在极其简单的页面上看到 4500 多毫秒的请求时间,流量几乎为零(我们尚未启动)。 New Relic 表示,99% 的时间都花在了渲染模板上。这是一个 100 行布局内的 75 行 完全静态 haml 模板。应用模板有标准的- if current_user.nil? 分支。
我还没有添加页面缓存。我当然会这样做,但我想在掩盖它之前确定这种性能非常差的根本原因。有小费吗?我应该从 Heroku 获得什么样的响应时间?在我的本地开发环境中,相同的页面响应时间为 26 毫秒(资产在 1.5 秒之前进入)。 New Relic 报告我在 Heroku 上的动态页面的平均响应时间为 2000 毫秒到 6000 毫秒。
编辑:我为静态 / 打开了页面缓存,现在看到的平均值为 173 毫秒。但我仍然担心我在动态页面上的糟糕平均水平。
【问题讨论】:
-
4500+ms 是一致的还是只是第一次命中?如果有一段时间没有使用,Heroku 会让应用进入睡眠状态(我认为是在一个小时不活动之后)
-
我认为 dynos 只为免费帐户闲置。还是您指的是应用服务器在未使用时释放内存?在那个特定页面上,平均实际上是(令人惊讶的)173 毫秒。但我仍然对平均 2k 到 6.5k 的其他动态页面感到好奇。 7 个请求的平均时间为 6500 毫秒。 8 有 4000 毫秒。 6个有2000毫秒。记录的最差响应时间是 51,000 毫秒。
-
是的,我想如果你付钱,它就不会睡觉。你能发布表现最差的页面吗?
-
可能是heroku上的数据库。您可以在 heroku devcenter.heroku.com/articles/console 上运行控制台。然后做类似 Benchmark.measure { 10000.times { |i| u = User.find_by_id(i); u.user_name if u } } 在您的开发盒和 heroku 上并进行比较。
-
如果您在 New Relic 中设置可用性监控以访问非静态页面,您的 dynos 将保持活动状态,因为 NR 每隔 30 秒就会访问您一次 =)
标签: ruby-on-rails performance heroku newrelic