22

正常に動作するものを介して、8 つの puma ワーカーを再起動しbundle exec pumactl -F config/puma.rb phased-restartています。今、私はますます多くの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 個のアイドル プロセスが発生します。(私の意見では、8 つ多すぎます。)

これらのプロセスをより適切に管理するにはどうすればよいですか? ご協力いただきありがとうございます!


アップデート

私の 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
4

2 に答える 2

1

これは、サーバーのシャットダウン時にデータベース接続が閉じられていないことが原因である可能性があります。https://github.com/puma/puma/issues/59その号の多くの人が ActiveRecord:: ConnectionAdapters::ConnectionManagement を使用してこれを処理しているか、Puma のon_restartフックを使用して独自にロールできる場合があります。

于 2014-07-16T02:50:10.137 に答える