任务调度 时会有多个进程的调用,导致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资源
明显就是每分钟执行任务,然后上次还没执行完还是在执行,叠加起来就很多了,代码有问题,可以加个进程锁类似的东西,保证同时只有一个进程或者几个自己控制
任务调度《Laravel 9 中文文档》 可以看下一下任务调度是怎么弄的
一般来说 schedule:run 负责调度 调度之后就关闭了。你这没关闭 是不是在这直接写了业务逻辑。杀掉所有进程 再手动执行观察一下输出 再分别手动执行任务看执行时间 有没有死循环等
确保每个任务当前只有一个在运行,如果还是占用高,那就是业务本身了,可以尝试错峰运行或者转移到另一个服务器运行
谢谢大家的 回答,大家说的都有道理。最后发现是服务器的crond进程导致的(对比了生产的状态发现里边多了三个进程 居然是crond的重启进程和查询状态的,不知道啥时候他们咋就一直常驻了。杀掉后就好了)