我遇到了Laravel 5.4的问题,我希望有人可以提供帮助。我有一个laravel 5.4项目,我使用队列发送电子邮件并执行如下所示的各种命令:
1. Kernel.php
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('queue:work')->everyMinute();
// Execute command at midnight daily to reject expired applications
$schedule->command('application:reject')->daily();
}
* * * * * bob cd /opt/lampp/htdocs/oap/ && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
* * * * * bob cd /opt/lampp/htdocs/ims/ && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
当我查看我的linux系统监视器时,我注意到每分钟都会启动一个新的php进程并占用13.8MB的内存。大约一个小时后,我开始看到我的自由记忆非常低。这些流程为/opt/lampp/bin/php-7.1.4 artisan queue:work
和/usr/local/bin/php artisan schedule:run
当上述情况发生时,我会运行artisan queue:restart
并且所有的php进程都将被杀死。
这可能是什么原因?
这对我来说很奇怪,因为我在Laravel 5.1中有相同的代码而我没有遇到这个问题。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
队列工作者是一个守护进程,它将继续进行轮询。使用cron停止运行队列工作者。他们是长期存在的流程,您可以根据服务器的要求运行工作人员,而不是每分钟产生一个新员工。
https://laravel.com/docs/5.4/queues#running-the-queue-worker
阅读文档。如果您不太熟悉,只需安装Supervisor
并让它处理所有工作。
答案 1 :(得分:0)
您的问题是您在代码中安排了一些命令。
每分钟安排的代码中的某种调度。 (:
在5.1中,它有效,因为有2个命令:queue:listen
长寿,queue:work
一直工作,直到队列为空。
似乎laravel团队要删除queue:listen
所以这是解决方案:
1)只需从Kernel.php
删除您的代码,并将其安排为普通工匠电话:
# daily
0 0 * * * bob cd /opt/lampp/htdocs/ims/ && /usr/local/bin/php artisan application:reject >> /dev/null 2>&1
2)与主管一起手动或监督queue:work
:
cd /opt/lampp/htdocs/oap/ && nohup php artisan queue:work &