首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TRDeadlockDetected:错误:死锁检测到

TRDeadlockDetected:错误:死锁检测到
EN

Stack Overflow用户
提问于 2014-06-24 11:26:08
回答 2查看 16K关注 0票数 23

我正在通过bundle exec pumactl -F config/puma.rb phased-restart重新启动8名美洲狮工人,一切都很好。现在我收到越来越多的postgres错误:

代码语言:javascript
复制
PG::TRDeadlockDetected: ERROR:  deadlock detected

我发现大约50个空闲postgres进程正在运行:

代码语言:javascript
复制
postgres: myapp myapp_production 127.0.0.1(59950) idle
postgres: myapp myapp_production 127.0.0.1(60141) idle
...

当我运行bundle exec pumactl -F config/puma.rb stop时,它们就消失了。在用bundle exec pumactl -F config/puma.rb start启动应用程序之后,我得到了整整16个空闲进程。(在我看来,八个太多了。)

如何更好地管理这些过程?谢谢你的帮忙!

更新

我的puma.rb:

代码语言:javascript
复制
environment 'production'
daemonize true

pidfile 'tmp/pids/puma.pid'
state_path 'tmp/pids/puma.state'

threads 0, 1
bind 'tcp://0.0.0.0:3010'

workers 8

quiet
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 09:23:04

--我可能已经找到了一个解决问题的方法:--我在控制器(自定义中间件)之外有一些查询,这似乎导致了这个问题。

如果在控制器之外有查询(ActiveMailer也可能导致此问题),请将代码放在ActiveRecord::Base.connection_pool.with_connection块中:

代码语言:javascript
复制
ActiveRecord::Base.connection_pool.with_connection do
  # code
end

ActiveRecord的with_connection方法生成从其池到块的数据库连接。当块完成时,连接将自动签回池中,从而避免连接泄漏。

希望这对你们中的一些人有帮助!

票数 27
EN

Stack Overflow用户

发布于 2014-07-16 02:50:10

看起来,这可能是由于数据库连接没有在服务器关机时关闭。https://github.com/puma/puma/issues/59很多人都在使用ActiveRecord::ConnectionAdapters::ConnectionManagement来处理这个问题,或者您可以使用Puma的重新启动钩子来滚动自己的重新启动

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24385407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档