任务调度 时会有多个进程的调用,导致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资源

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

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

1年前 评论

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

1年前 评论

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

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

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

1年前 评论

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

1年前 评论

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