【发布时间】:2014-08-14 15:26:24
【问题描述】:
我正在通过bundle exec pumactl -F config/puma.rb phased-restart 重新启动 8 名 puma 工人,一切正常。现在我收到越来越多的 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
【问题讨论】:
-
我没有使用 puma/ruby 的经验。从数据库方面来看,查看锁应该会有所帮助。 wiki.postgresql.org/wiki/Lock_Monitoring。尝试那里提供的最后一个查询。您将知道哪个事务阻塞了哪个事务。
-
如果不重新启动,空闲连接会不断增加,直到应用因此错误而中断:
PG::ConnectionBad (FATAL: remaining connection slots are reserved for non-replication superuser connections )
标签: ruby-on-rails ruby postgresql puma idle-processing