gpt4 book ai didi

ruby-on-rails - PG::TRDeadlockDetected:错误:检测到死锁

转载 作者:数据小太阳 更新时间:2023-10-29 06:32:10 28 4
gpt4 key购买 nike

我正在通过 bundle exec pumactl -F config/puma.rb phased-restart 重新启动 8 个 puma worker,效果很好。现在我收到越来越多的 postgres 错误:

PG::TRDeadlockDetected: ERROR:  deadlock detected

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

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:

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

最佳答案

我可能已经找到了我的问题的解决方案:我在我的 Controller (自定义中间件)之外有一些查询,这似乎是导致问题的原因。

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

ActiveRecord::Base.connection_pool.with_connection do
# code
end

ActiveRecord 的 with_connection 方法产生一个从它的池到 block 的数据库连接。当 block 完成时,连接会自动签回池中,避免连接泄漏。

希望对大家有所帮助!

关于ruby-on-rails - PG::TRDeadlockDetected:错误:检测到死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385407/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com