laravel 定时任务太吃资源
laravel 里面写了太多定时任务 有通过队列的 有通过定时任务去执行的 定时执行的频率又很高,
然后fpm 请求用的又是同一个数据库,所以定时任务执行多的时候,网页都加载不出来,有什么优化的思路吗?
———————– 2023-11-28 14:59 ———————————-
看了一下部署方式使用的docker, 但是是a, b 项目都挂在了 www 目录下面,但是b 项目中有大量的定时任务在跑,频率很高,而他们是用的同一个fpm,这样肯定会慢很多,这可能只是其中一个原因
——————– 解决方案 ———————————
相关表关联字段都加了索引 立马效率就上来了
耗时任务导出改为cli 异步导出
本作品采用《CC 协议》,转载必须注明作者和本文链接
优化定时策略,做好分钟级、小时级、天级划分 优化代码,不要跑空任务 有必要就配置读写分离
有没有一种可能跟 laravel 的定时任务机制吃不吃资源没有关系 :sweat_smile:
建议从三方面入手:
:rocket: 应用架构
laravel 是单机部署还是多机,定时任务和页面加载是否在同一台服务器上,如果在,是否可以分开
看楼上说 Mysql 已经读写分离,那就先假设是一主一从。
:alarm_clock:定时任务
那执行任务里面大概逻辑是什么,查询+插入/修改 MySQL 吗,你说定时任务多,是意思定时操作MySQL频率大,任务也比较耗时啥的,所以占用资源多,影响页面的加载 ,是否这部分逻辑可以优化?
:link:页面加载
页面加载数据,应该是只读吧,如果读的话,是不是可以加缓存。如果操作必须都是 MySQL,不采用缓存,是不是考虑从库的数量增多,或者MySQL 连接数增加,看一下相关监控服务,比如MySQL主库从库的 CPU 内存占用之类的。
查一下 慢查询日志,优化一下SQL
优化SQL, chunk, 队列
检查定时任务相关进程 内存占用情况
定时任务不是cli跑的吗?跟fpm没关系吧
解决问题的前提是知道问题是啥,可以使用一些性能分析工具来分析。
先确定是数据库服务器占用高了, 还是web服务器占用高
看看占用cpu高的任务是数据库还是逻辑代码,就可以优化了,其实很多任务,例如加入到队列的任务,分开消费要很多次,可不可以把有的任务,可以批量处理的变更为批量处理。
这个跟定时任务多少没关系吧,还是定时任务里代码写的,有好资源的操作,优化下定时任务里面的代码吧
我现在把消费队列放在新的容器里去跑了 能好了那么一丢丢
同一个数据库
网页加载不出来
搞不懂这俩之间有啥必然联系。我估计是一台服务器把所有东西都装上了那种操作,这里建议把数据库独立出去呢,比如买一个阿里云的rdms。把数据库索引字段重新整理和加了索引 现在嘎嘎嘎快 :kissing_heart:
看看跑任务的时候cpu哪里占用了,数据库高优化数据库,服务器高就单独搞个跑任务的服务器