Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么Heroku上的数据库连接不足?_Ruby On Rails_Heroku_Connection Pooling_Sidekiq - Fatal编程技术网

Ruby on rails 为什么Heroku上的数据库连接不足?

Ruby on rails 为什么Heroku上的数据库连接不足?,ruby-on-rails,heroku,connection-pooling,sidekiq,Ruby On Rails,Heroku,Connection Pooling,Sidekiq,我们在Heroku上有一个带有Sidekiq的Rails应用程序,数据库连接已经用完 ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.000 seconds) Heroku的东西: 数据库计划:标准0(120个连接) 网络动态:2个标准-2X 工人动态:1个标准-2X heroku配置: MAX_THREADS: 5 (DB

我们在Heroku上有一个带有Sidekiq的Rails应用程序,数据库连接已经用完

ActiveRecord::ConnectionTimeoutError: could not obtain a database  
connection within 5.000 seconds (waited 5.000 seconds)
Heroku的东西:

数据库计划:标准0(120个连接)

网络动态:2个标准-2X

工人动态:1个标准-2X

heroku配置:

MAX_THREADS: 5
(DB_POOL not set)
(WEB_CONCURRENCY not set)
程序文件:

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq
database.yml:

...

production:
  url:  <%= ENV["DATABASE_URL"] %>
  pool: <%= ENV["DB_POOL"] || ENV['MAX_THREADS'] || 5 %>
sidekiq.yml:

---
:concurrency: 25
:queues:
  - [default]
我们还有一些rake任务,每10分钟启动一次,它们在一两秒钟内完成

当我们在sidekiq中进行大量消息处理时,问题似乎就发生了。我们做的事情如下:

  • 从第三方web服务获取文章标题
  • 将每个标题插入单个事务中的db中
  • 在sidekiq中为每个标题创建一条消息(worker.perform\u async)
  • 处理每条消息,点击端点以获取正文并更新正文(可能需要0.5-3秒)
  • 当第4个问题发生时,我们看到了连接问题

    我的理解是,我们在上面的配置中远远低于连接限制,但是我们是否做了一些错误的事情?有什么东西在消耗游泳池吗?任何帮助都会很好,谢谢

    资料来源:


    您在25个Sidekiq线程之间共享5 DB连接。将DB_POOL设置为25,或将Sidekiq的并发性设置为5。

    您在25个Sidekiq线程之间共享5个DB连接。将DB_POOL设置为25,或将Sidekiq的并发性设置为5

    ---
    :concurrency: 25
    :queues:
      - [default]