任务调度过多导致 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关闭。

请问各位大佬有什么解决办法吗? 还是说升级服务器配置?

小弟先行感谢!

大王
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

这什么大公司啊,这么多任务

5年前 评论
大王 (楼主) 5年前

估计是爬虫吧

5年前 评论
xin6841414

遇到同样问题,现有的服务器上配置多个40个站了,还在继续增加中,每个站都有任务调度,cpu 会在每分钟开始的时候爆满,跑完cpu占用变成个人位, 不该业务的情况下怎么解决这个问题,每个 php artisan schedule:run 占用5%的cpu 20个同时就干100%了,心塞!

4年前 评论

1、先检查业务代码是否有可优化空间;

2、查看 schedule 的进程是否有大量堆积,如果有大量堆积尝试加大 lock_time 的值;

3、如果还是不行就上队列吧,调度将任务添加到队列,因为队列的 Worker 是固定的,那么可以保证同时处理任务数量是恒定的,不至于 CPU 爆满。

如果用队列替换了任务调度的逻辑,依然 CPU 使用率达到 100%,那么就是业务代码的问题。

4年前 评论
congcong 4年前
GeorgeKing (作者) 4年前
congcong 4年前
GeorgeKing (作者) 4年前

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