【问题标题】:aritsan crontab job generate many progcess工匠 crontab 作业生成许多进程
【发布时间】:2016-02-27 20:26:00
【问题描述】:

我使用 aritsan 命令(lavaral 5.1)处理后台工作,

我按照mamul在crontab中设置了* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1。

还有我的工作设置,比如

'$schedule->command('job')->cron('0 * * * *');' 

在 Kernel.php 中

这个任务效果很好,但是几个小时后我检查我的服务器进程时,我发现 aritsan 生成了很多进程,

注意:在我的工作中,我在程序结束后用handle() 方法写exit()。 请帮我找出为什么工匠生成那些进程(不退出?),它占用了很多内存。

非常感谢!

~ ps -aux|grep artisan|grep -v grep|wc -l  
24  

root     15690  0.0  2.3 235588 11872 ?        S    Nov16   0:05 /usr/local/bin/php artisan job  
root     16382  0.0  2.3 237748 11996 ?        S    Nov16   0:06 /usr/local/bin/php artisan job  
root     17735  0.0  2.3 237748 12036 ?        S    Nov16   0:05 /usr/local/bin/php artisan job  
root     17786  0.0  2.4 237748 12052 ?        S    Nov14   0:15 /usr/local/bin/php artisan job  
root     20274  0.0  2.4 237748 12056 ?        S    Nov14   0:14 /usr/local/bin/php artisan job  
root     23771  0.0  2.4 237748 12056 ?        S    Nov14   0:12 /usr/local/bin/php artisan job  
root     24191  0.0  2.4 237748 12056 ?        S    Nov16   0:03 /usr/local/bin/php artisan job  
root     26192  0.0  2.4 237748 12048 ?        S    Nov16   0:02 /usr/local/bin/php artisan job  
root     26287  0.0  2.4 237748 12048 ?        S    Nov14   0:12 /usr/local/bin/php artisan job  
....  

【问题讨论】:

  • 应该不需要在 Job 的 firehandle 方法中添加 exit。如果删除它会发生什么?
  • @Luceos 如果我没有在句柄方法中设置退出,可能会导致这个问题。

标签: php laravel command crontab laravel-artisan


【解决方案1】:

您应该尝试手动执行计划任务

php /path/to/artisan schedule:run

并查看运行所需的时间。如果这需要很多时间,则意味着您在某个地方遇到了瓶颈,并且它永远不会到达您的 exit()。 您可能有一个竞争条件,其中有多个进程请求同一件事。您需要找到耗时的任务并尝试对其进行优化。您可能还想使用

->withoutOverlapping();

这样同时运行的任务不会超过一个。

【讨论】:

  • 谢谢你,我的朋友。我检查了我的程序,它可能卷曲超时导致这个问题,我设置了较低的卷曲超时,这个问题不再发生。
  • 不客气。你也可以接受答案。
猜你喜欢
  • 2013-08-20
  • 2021-12-10
  • 2014-03-23
  • 1970-01-01
  • 2021-02-08
  • 2015-07-04
  • 1970-01-01
  • 2020-06-28
  • 2020-11-29
相关资源
最近更新 更多