使用Rails RefineryCMS在Heroku上实现高响应队列时间

时间:2013-04-16 11:17:35

标签: ruby-on-rails heroku refinerycms newrelic

我正在Heroku上运行RefineryCMS应用程序。这是两个web dynos,但实际的dyno负载低于10%(如果我正在正确读取New Relic)当前可忽略不计的流量为每分钟13个请求。

但是,我的应用服务器平均响应时间是800毫秒,几乎所有时间都花在请求排队上。每个其他请求将遭受3000毫秒(或更多)请求队列峰值,而其他一些请求将在200-300毫秒内加载,因为积极的内存缓存。

如何找出问题的根本原因是什么?

编辑:在对日志进行进一步调查后,我不得不问自己一个问题:这是否预期RefineryCMS会在Amazon S3上进行资产托管行为?

heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMTAvMDkvNzY4L0pFQU5fQ0xBVURFX1BFTk5FVElFUi5qcGciXSxbInAiLCJ0aHVtYiIsIjI1MHgiXV0/JEAN-CLAUDE%20PENNETIER.jpg service=1061ms status=200 bytes=11232
heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMTEvMzkvMjI3L01BUklTU19KQU5TT05TLmpwZyJdLFsicCIsInRodW1iIiwiMjUweCJdXQ/MARISS%20JANSONS.jpg service=1161ms status=200 bytes=14358
heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMjEvNDAvOC9TaXJfTkVWSUxMRV9NQVJSSU5FUi5qcGciXSxbInAiLCJ0aHVtYiIsIjI1MHgiXV0/Sir%20NEVILLE%20MARRINER.jpg service=5412ms status=200 bytes=23191

这些文件是否在本地托管并因此压缩请求?

2 个答案:

答案 0 :(得分:2)

这听起来像是慢速运行请求。请查看您的日志以获取更多信息,但我怀疑您会看到一堆H12错误。

如果你还没有,我会考虑使用Unicorn和Rack :: Timeout。通常,由其他长时间运行的请求引起的队列会降低快速请求的速度。通过查看使用Rack :: Timeout,您可以终止任何长时间运行的请求(例如15秒),而使用Unicorn将允许您一次提供多个请求。

当然,这是假设你在Cedar上运行。如果你不是,我会尽快升级。

答案 1 :(得分:0)

您是否尝试过切换到使用独角兽网络服务器?

它允许您同时从一个dyno提供多个请求。

Details on setup here