Laravel 作业在 DEALLOCATE 上留下空闲的 postgresql 进程

Laravel jobs leaves an idle postgresql process on DEALLOCATE

每次延迟作业在我的服务器上 运行 我都可以在 postgreSQL 中看到一个新的空闲进程。 运行 select * from pg_stat_activity; 我可以看到:

DEALLOCATE pdo_stmt_00000018

我试图理解,每次延迟排队的作业刚刚 运行 时都会出现一行(以及 htop 中的一个进程)。

我的作业的最后一行是:

$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

时消失

我找到了一个(快速而肮脏的)解决方法。在我的作业句柄函数的末尾添加:

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

已在 Laravel 上打开一个问题:https://github.com/laravel/framework/issues/18384