任务调度过多导致 CPU 爆满
服务器配置:4核8G 10M ContOS7.4
laravel版本:5.7
php:7.1
mysql:5.6
任务调度Console中有50+的不同任务执行
统一相同的参数为:
$lock_time = 5;
$schedule->command('XXXXX')->everyMinute()->runInBackground()->withoutOverlapping($lock_time);
大部分为everyMinute,其他的有不同间隔时间
其中内容大部分为请求外部api接口后查询校验、入库、修改。
每次操作mysql前都执行过:
DB::connection()->disableQueryLog();
运行一小段时间后cpu常常爆满,导致mysql关闭。
请问各位大佬有什么解决办法吗? 还是说升级服务器配置?
小弟先行感谢!
关于 LearnKu
这什么大公司啊,这么多任务
估计是爬虫吧
遇到同样问题,现有的服务器上配置多个40个站了,还在继续增加中,每个站都有任务调度,cpu 会在每分钟开始的时候爆满,跑完cpu占用变成个人位, 不该业务的情况下怎么解决这个问题,每个 php artisan schedule:run 占用5%的cpu 20个同时就干100%了,心塞!
1、先检查业务代码是否有可优化空间;
2、查看 schedule 的进程是否有大量堆积,如果有大量堆积尝试加大 lock_time 的值;
3、如果还是不行就上队列吧,调度将任务添加到队列,因为队列的 Worker 是固定的,那么可以保证同时处理任务数量是恒定的,不至于 CPU 爆满。