任务调度 时会有多个进程的调用,导致cpu过高

1. 运行环境

1). 当前使用的 Laravel 版本?

Lavavel 6.2

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4.30

php-fpm 版本:7.4

开启了opcache :

opcache.enable = 1
opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=80000
opcache.validate_timestamps=1
opcache.revalidate_freq=780
opcache.fast_shutdown=1
opcache.enable_cli=1

3). 当前系统

CentOS 7.8
2核 4G

4). 业务环境

生产环境,无负载均衡

2. 问题描述?

每分钟的任务调度,都会有多个进程同时调用,cpu就给顶满了(就算把任务调度中的代码屏蔽掉,也会有很多的资源占用);

* * * * * /usr/bin/php /www/wwwroot/ghshop/artisan schedule:run >> /dev/null 2>&1

如图

3. 您期望得到的结果?

不知为什么会有如此多的进程同时调用,而且不写任何逻辑 也会占用不少的cpu资源

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 7

是你本身的业务脚本在占用的好吧

2周前 评论
jingyu_wjy (楼主) 2周前

明显就是每分钟执行任务,然后上次还没执行完还是在执行,叠加起来就很多了,代码有问题,可以加个进程锁类似的东西,保证同时只有一个进程或者几个自己控制

2周前 评论

任务调度《Laravel 9 中文文档》 可以看下一下任务调度是怎么弄的

2周前 评论

一般来说 schedule:run 负责调度 调度之后就关闭了。你这没关闭 是不是在这直接写了业务逻辑。杀掉所有进程 再手动执行观察一下输出 再分别手动执行任务看执行时间 有没有死循环等

2周前 评论
$schedule->command('emails:send')->withoutOverlapping(10);

确保每个任务当前只有一个在运行,如果还是占用高,那就是业务本身了,可以尝试错峰运行或者转移到另一个服务器运行

2周前 评论

谢谢大家的 回答,大家说的都有道理。最后发现是服务器的crond进程导致的(对比了生产的状态发现里边多了三个进程 居然是crond的重启进程和查询状态的,不知道啥时候他们咋就一直常驻了。杀掉后就好了)

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!