工匠 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 的fire
或 handle
方法中添加 exit
。如果删除它会发生什么?
@Luceos 如果我没有在句柄方法中设置退出,可能会导致这个问题。
【参考方案1】:
您应该尝试手动执行计划任务
php /path/to/artisan schedule:run
并查看运行所需的时间。如果这需要很多时间,则意味着您在某个地方遇到了瓶颈,并且它永远不会到达您的 exit()。 您可能有一个竞争条件,其中有多个进程请求同一件事。您需要找到耗时的任务并尝试对其进行优化。您可能还想使用
->withoutOverlapping();
这样同时运行的任务不会超过一个。
【讨论】:
谢谢你,我的朋友。我检查了我的程序,它可能卷曲超时导致这个问题,我设置了较低的卷曲超时,这个问题不再发生。 不客气。你也可以接受答案。以上是关于工匠 crontab 作业生成许多进程的主要内容,如果未能解决你的问题,请参考以下文章