使用Heroku在Ruby on Rails上请求超时

时间:2017-04-27 07:23:02

标签: ruby-on-rails ruby performance heroku

我相当复杂的工作板应用程序似乎受到超时和内存错误的影响 - 我每天从日志提供商处收到以下消息:

Apr 25 20:22:47 site-production heroku/router: at=error code=H12 desc="Request timeout" method=GET path="/jobs?job_id=66565&show=true" host=www.site.de request_id=b716c55f-22c8-4255-b83d-2e25a1d0a018 fwd="80.248.226.4" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=http
Apr 25 20:22:54 site-production heroku/router: at=error code=H12 desc="Request timeout" method=GET path="/jobs?job_id=403912&show=true" host=www.site.de request_id=04837f2e-1801-4e74-ae5d-237bceab4711 fwd="193.181.19.220" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=http
Apr 25 20:23:00 site-production heroku/router: at=error code=H12 desc="Request timeout" method=GET path="/jobs?job_id=178320&show=true" host=www.site.de request_id=27ad986d-2ddc-427e-aeb0-9a209c393494 fwd="185.139.164.53" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=http
Apr 25 20:23:02 site-production heroku/router: at=error code=H12 desc="Request timeout" method=GET path="/jobs?jobsearch_id=172059&page=1" host=www.site.de request_id=e01a5f8e-7f86-4d86-a4f3-973a8f40aae8 fwd="176.74.196.127" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=http

我正在考虑如何分析和解决这个问题的最佳方法。这似乎与我的高内存使用率(133%)和慢/复杂查询有关。

请批评我的方法:

  1. 确定最慢/最耗费资源的查询(NewRelic,然后学习如何修复它们 - Elasticsearch?)
  2. 查找应用程序的大多数内存密集型部分(搜索指南重新存储在RoR上,然后进行优化)
  3. 清理gem文件/更新 - 删除不需要的宝石
  4. 使用外部开发者查看应用以获得第二意见
  5. 睡得更好
  6. 很高兴获得反馈或想法 - 目前在Heroku和app上运行3个专业2x dynos仍感觉非常慢。谢谢!

2 个答案:

答案 0 :(得分:1)

如果任何请求超过30秒,则使用deplayed_job gem beacuse heroku throw request timeout在后台运行复杂或更长的作业。

答案 1 :(得分:1)

我将如何处理这个问题:

  1. 我总是从the error上的Heroku文档开始。
  2. 运行EXPLAIN ANALYZE
  3. ,查看expensive queries
  4. 查看caching
  5. 是的,Elasticsearch用于搜索所有内容。它的速度非常快,可以真正消除主要应用程序的压力。