use*_*400 12 activerecord rack heroku query-cache ruby-on-rails-4
我在heroku上有一个应用程序,在Puma上运行:
workers 2
threads_count 3
pool 5
Run Code Online (Sandbox Code Playgroud)
看起来有些请求卡在中间件中,它使应用程序非常慢(非常!).我见过其他人关于这个问题的线索,但到目前为止还没有解决方案.
如果您有任何提示,请告诉我.
!
!
我为Heroku支持工作,并且Middleware/Rack/ActiveRecord::QueryCache#call
通常被New Relic报告为问题.不幸的是,每当问题的根源出现在其他地方时,它通常都是红鲱鱼.
QueryCache
是Rails首先尝试检查连接以供使用的地方,因此连接的任何问题都将在此处显示为请求"卡住"等待.这并不意味着数据库服务器必然没有连接(如果你有Postgres的Librato图表,他们会显示这个).这可能意味着某些事情导致某些数据库连接进入错误状态,并且新的连接请求正在等待.这可能发生在Puma的旧版本中,其中使用了多个线程并且reaping_frequency
设置了 - 如果某些连接进入坏状态而其他连接被收到,这将导致问题.
一些高级别的建议如下:
rack-timeout
gem,也要升级这些升级通常会有所帮助.如果没有,还有其他选项可供选择,例如从线程切换到基于工作程序的进程或使用Postgres连接池(如PgBouncer).我们在此处提供了有关配置与Postgres一起使用的并发Web服务器的更多建议:https://devcenter.heroku.com/articles/concurrency-and-database-connections
我将回答我自己的问题:我只需要检查对我的数据库的所有查询。其中一个花费了很长时间,即使不经常请求,之后也会使整个服务器变慢一段时间(即使在该过程完成后,在服务器)。解决方案:检查对您的数据库的所有查询,修复最慢的查询(这可能只是意味着将其分解为几个步骤,也可能意味着让它在没有流量的夜间运行等......)。一旦此查询得到修复,一切都应该恢复正常。
归档时间: |
|
查看次数: |
3873 次 |
最近记录: |