2017-03-16 26 views
0

遅延ジョブがサーバーで実行されるたびに、私はpostgreSQLで新しいアイドルプロセスを見ることができます。LaravelジョブはDEALLOCATEにアイドル状態のpostgresqlプロセスを残す

DEALLOCATE pdo_stmt_00000018 

は、私が理解しようとした、そしてもう1行(およびhtopの1つの以上のプロセスが)遅れてキューに入れられた仕事はただ走っていたたびに表示されます:select * from pg_stat_activity;実行私は見ることができます。

私の仕事の最後の行は次のとおりです。

$this->log->info("Invitation {$this->invitation->uuid} sent"); 

そして私は、私のログにこれを見ることができますので、すべてのものは大丈夫ですが、それは後にクリーンアップしません。私は毎回 "DEALLOCATE pdo_stmt_00000xxx"というアイドルプロセスを持っています。

この問題を回避するにはどうすればよいですか?これを引き起こしているのは何ですか?ここで

は上司の設定です:

[program:laravel-queue-worker] 
process_name=%(program_name)s_%(process_num)02d 
command=php /path/to/my/site/artisan queue:work --queue=invitation,default --sleep=3 --tries=3 
autostart=true 
autorestart=true 
user=www-data 
numprocs=2 
redirect_stderr=true 
stdout_logfile=/path/to/my/logs/worker.log 

サイドノート:アイドル状態のプロセス私はphp artisan queue:restart

+0

その名前のpdo_stmt_00000xxxできる再利用するプリペアドステートメントを解放するようで、接続を終了しないのですか?多分それはトランザクションに設定されたユーザープールモードでpgbouncerを実行することを意味しますか? –

答えて

0

を実行したときに、私は(迅速かつ汚い)回避策を見つけ消えます。私の仕事のハンドル関数の最後にこれを追加する:

\DB::disconnect(); 
sleep(1); 

問題がLaravelに開かれている:https://github.com/laravel/framework/issues/18384

関連する問題