首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Puma web服务器(ROR)和连接超时

Puma web服务器(ROR)和连接超时
EN

Stack Overflow用户
提问于 2015-02-12 18:40:28
回答 1查看 3.8K关注 0票数 2

我有一个自定义的Ruby on rails安装,并使用puma作为web服务器(由Nginx -socket支持)

我要连接的数据库是rds媒体(所以限制296个连接)。我的puma设置是线程1:32和4个工作线程。具有128个连接池。

我有一个高负载300个请求/秒,假设每1000个请求,进行一个更长的计算,大约需要3秒(获取所有事件,进行一些计算并更新它们)。

我得到了错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ActiveRecord::ConnectionTimeoutError: could not obtain a database connection within 5.000 seconds (waited 5.016 seconds)

但是,如果我查看rds数据库,则只打开了43个连接。我的内存是7000MB中的2000MB(双核处理器是100%),我想知道为什么我得到一个连接超时,即使我所有的连接都没有打开(当然,puma配置是正确的)?

感谢您的帮助!

编辑:

在我的puma.rb中,我有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
on_worker_boot do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = Rails.application.config.database_configuration[Rails.env]
    config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 # seconds
    config['pool']              = ENV['DB_POOL'] || 128
    ActiveRecord::Base.establish_connection
  end
end
EN

回答 1

Stack Overflow用户

发布于 2015-02-12 18:51:56

正如这里在rails configuration guide about database pooling中提到的,当所有数据库连接耗尽时,ActiveRecord将等待一个空闲,我假设您增加的数量是http连接限制,而不是数据库连接限制。

您可以编辑database.yml并将连接限制增加到296,这是rds实例的限制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
production:
  adapter: mysql2
  database: /path/to/sock
  pool: 296
  # username, password, etc
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28485245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文