Rai*_*ana 19 ruby postgresql ruby-on-rails idle-processing puma
我通过bundle exec pumactl -F config/puma.rb phased-restart什么工作正常重启8个美洲狮工人.现在我收到越来越多的postgres错误:
PG::TRDeadlockDetected: ERROR: deadlock detected
Run Code Online (Sandbox Code Playgroud)
我发现大约有50个闲置的postgres进程在运行:
postgres: myapp myapp_production 127.0.0.1(59950) idle
postgres: myapp myapp_production 127.0.0.1(60141) idle
...
Run Code Online (Sandbox Code Playgroud)
当我跑步时,它们消失了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
Run Code Online (Sandbox Code Playgroud)
Rai*_*ana 23
我可能已经找到了我的问题的解决方案:我在我的控制器(自定义中间件)之外有一些查询,这似乎导致了问题.
如果您在控制器之外有查询(ActiveMailer也可能导致此问题),请将您的代码放在一个ActiveRecord::Base.connection_pool.with_connection块中:
ActiveRecord::Base.connection_pool.with_connection do
# code
end
Run Code Online (Sandbox Code Playgroud)
ActiveRecord的with_connection方法产生从其池到块的数据库连接.块完成后,连接会自动检回池中,避免连接泄漏.
我希望这有助于你们中的一些人!
| 归档时间: |
|
| 查看次数: |
9694 次 |
| 最近记录: |