Rails mysql 数据库 could not obtain a database connection

cyzgbw · 2013年11月07日 · 最后由 rd084c 回复于 2015年08月26日 · 5222 次阅读

采用 rails 默认的数据库配置配置

production:
  adapter: mysql2
  encoding: utf8
  database: TaskSystem_development
  pool: 8
  username: root
  password: XXX
  host: localhost

运行一段时间后就出现

ctiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)):
  activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in `block in wait_poll'
  activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:181:in `loop'
  activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:181:in `wait_poll'
  activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:136:in `block in poll'
  e:/RailsInstaller/Ruby2.0.0/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'

上网搜索有的说是 pool 加大,但是加大后还是会出现这个情况,有没有人遇到过这个情况,求助!

遇到过。把 pool 调大一些,再大一些试试。 可能是由于同时进行 mysql 写入的操作太多了。如果是循环一条一条的插入的话,可以放到数组,最后一次性插入。 我也不太懂这个问题。

puma development 模式下用 rack server 跑 grape 的 API 服务。遇到过一样的问题。 在 config.ru 中加入下面这行,解决了问题 use ActiveRecord::ConnectionAdapters::ConnectionManagement

对了,我的 pool 是 5。没有调高。

#1 楼 @raofeng #2 楼 @Victor 感谢你们的回答,后来我发现是后台任务执行太频繁了,导致连接池耗光了

请问最后怎样解决的?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号