Laravel Queue:工作耗费了我所有的RAM

时间:2017-06-04 16:02:37

标签: laravel

我遇到了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();
}
  1. 在/ etc / crontab中,我有以下内容:
  2. * * * * * 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中有相同的代码而我没有遇到这个问题。我该怎么做才能解决这个问题?

2 个答案:

答案 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 &