【问题标题】:In Production :: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds) (ActiveRecord::ConnectionTimeoutError)在生产中 :: 无法在 5.000 秒内获得数据库连接(等待 5.000 秒)(ActiveRecord::ConnectionTimeoutError)
【发布时间】:2016-04-16 21:05:44
【问题描述】:

我收到了错误

/home/yaswant/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in `block in wait_poll':无法在其中获得数据库连接 5.000 秒(等待 5.000 秒)(ActiveRecord::ConnectionTimeoutError)

我的连接池有 30 个连接。 我的应用程序是基于 api 的应用程序,我在导轨之外使用线程。 请建议我如何解决这个问题

【问题讨论】:

  • 不了解更多信息很难提供帮助。你试过什么?你怎么连接?你可以从终端连接吗?
  • 加快响应速度?减少数据库请求?没有简单的答案。但是,如果您在 localhost 上有 30 个连接池并设法杀死 API,我会觉得您的设计有问题。
  • @MichalSzyndel 我在 prod 环境中遇到了这个错误。
  • 那么我想你应该学习如何对请求进行负载平衡。从长远来看,仅仅增加数据库的限制会让你陷入困境。正如我所说,如果您在高负载下工作,最好确保所有 API 响应尽可能快。

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord


【解决方案1】:

您需要增加应用程序将使用的连接池。

默认情况下,Sidekiq 每个队列需要 25 个,这意味着如果您有 10 个队列,那么您最终会显示很多错误,它们最终会成功,但这样做需要更长的时间。

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多