任务调度导致cpu占用过高

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

9.52.16

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

PHP 版本:8.0

3). 当前系统#

centos7.9
cpu:6 核
内存:16G

4). 业务环境#

生产环境
无负载均衡

2. 问题描述?#

任务调度导致 cpu 占用过高,虽然有两个站点,但是实际上只有总共只有五个任务,而且还是错开执行的 (两分钟一次,半小时一次的,一个月一次的)。
但是我看基本上每分钟都会去执行这个 command,占用突然爆满,可能也就几秒钟的时间
对于任务也是有加 withoutOverlapping 避免任务重复,但是实际上业务场景任务一般两分钟左右就能执行完,任务基本上不会有重复

任务调度导致cpu占用过高

3. 您期望得到的结果?#

请问各位有遇到过相关问题嘛,有没有什么解决方案

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

加下调试看看,比如时间。另外 PHP 日志,数据库日志也观察看看。

1年前 评论
Ancient (楼主) 1年前
徵羽宫 1年前

我搞得贼复杂, 用广播发送消息到本地处理了。

1年前 评论
Ancient (楼主) 1年前
徵羽宫 (作者) 1年前
Ancient (楼主) 1年前
徵羽宫 (作者) 1年前

我得也是

1年前 评论
❤seven (作者) 1年前
Ancient (楼主) 1年前

CPU 负载高,具体要看业务,你的业务代码不贴出来或者业务处理流程逻辑不讲清除,没办法帮你分析问题。

1年前 评论
Ancient (楼主) 1年前

同样的问题飘过,就是执行这个脚本的一瞬间那 cpu 上去了

1年前 评论
Ancient (楼主) 1年前
meows 1年前

我以为只有我有这个问题,laravel10 也是,测试的空任务,执行的时候 cpu 爆满,后经过测试是任务调度用 command 命令才会如此,还不知道如何解决

1年前 评论

手动执行 command 命令也会 cpu 突然升高,任务调度只要不使用 command 就正常,整个程序只要有 php artist 命令就会 cpu 升高,求大神解答!

1年前 评论
Ancient (楼主) 1年前
haircutlj (作者) 1年前
❤seven 1年前

2 核 4G 的每秒中去執行平均 1-2 次 command 命令 平均最最高好像也才 55%

1年前 评论
haircutlj 1年前
cccdz (作者) 1年前

想看看你任务调度中的代码

1年前 评论
Ancient (楼主) 1年前

如果是没有任何调度任务的话,CPU 占用还那么高,可能是框架初始化的过程中有一些其他逻辑,例如是否在 ServiceProvider 中为 Web 服务查询全局数据这种操作。

为了更好的验证是否是框架问题,建议可以创建一个新的项目,什么都不做,直接运行 php artisan schedule:run 看下 CPU 占用率!

如果依然排查不出问题,可以开启 xdebug 的 profiling,导出 profiling 文件,然后用可视化工具分析性能问题!

1年前 评论
haircutlj 1年前
GeorgeKing (作者) 1年前
GeorgeKing (作者) 1年前
haircutlj 1年前
haircutlj 1年前
GeorgeKing (作者) 1年前
cccdz 1年前
haircutlj 1年前

拿台服务器出来单独跑任务吧

1年前 评论
haircutlj 1年前
MR_NOBODY (作者) 1年前

Laravel

@haircutlj

1年前 评论
haircutlj 1年前
meows 1年前
GeorgeKing (作者) 1年前

首先不确定是不是 laravel bug 所致,其次定时任务框架一大堆。
webman workerman crontab ,安装一下 laravel eloquent 业务都不需要改变。www.workerman.net/doc/webman/compo...
Hyperf Swoole, 连接池本身使用的 laravel eloquent, 也是不需要改变业务。
https://hyperf.wiki/3.0/#/zh-cn/crontab?id=%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1

所以你在纠结什么呢?要不就追踪下 laravel 任务调度的原理,看看能否找到原因。

第三方框架性能更好,我看你这种调用我都觉得打脑壳。
每次 fork 一个进程去运行,然后这个进程就退出了,看着就觉得性能差。
每次都要加载 laravel console/kernel 到内存,定时任务换别的框架来做吧!(其它框架常驻内存,不用你每次 fork 进程,会一直常驻,只会每次运行你的业务)

1年前 评论
GeorgeKing 1年前
meows (作者) 1年前
haircutlj 1年前

我在 mac 也遇到过一次,大致是更新了 php 然后 cpu 的进程很多,导致 cpu 温度 90 度,一直降不下来。我无意查了下进程,发现 php 进程数很多,关闭全部 php 进程,重新启动电脑,解决。

1年前 评论

使用 swoole,cpu 立马就降下去了

7个月前 评论