工匠 crontab 作业生成许多进程

Posted

技术标签:

【中文标题】工匠 crontab 作业生成许多进程【英文标题】:aritsan crontab job generate many progcess 【发布时间】: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 如果我没有在句柄方法中设置退出,可能会导致这个问题。 【参考方案1】:

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

php /path/to/artisan schedule:run

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

->withoutOverlapping();

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

【讨论】:

谢谢你,我的朋友。我检查了我的程序,它可能卷曲超时导致这个问题,我设置了较低的卷曲超时,这个问题不再发生。 不客气。你也可以接受答案。

以上是关于工匠 crontab 作业生成许多进程的主要内容,如果未能解决你的问题,请参考以下文章

shell后台执行命令-crontab

CRONTAB

实践作业之编译安装LAMP

Linux定时任务crontab

第三章 进程调度的几种方式

lunux定时任务