laravel 定时任务太吃资源

laravel 里面写了太多定时任务 有通过队列的 有通过定时任务去执行的 定时执行的频率又很高,
然后fpm 请求用的又是同一个数据库,所以定时任务执行多的时候,网页都加载不出来,有什么优化的思路吗?

———————– 2023-11-28 14:59 ———————————-
看了一下部署方式使用的docker, 但是是a, b 项目都挂在了 www 目录下面,但是b 项目中有大量的定时任务在跑,频率很高,而他们是用的同一个fpm,这样肯定会慢很多,这可能只是其中一个原因

——————– 解决方案 ———————————
相关表关联字段都加了索引 立马效率就上来了
耗时任务导出改为cli 异步导出

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 21

优化定时策略,做好分钟级、小时级、天级划分 优化代码,不要跑空任务 有必要就配置读写分离

4个月前 评论
晏南风 (楼主) 4个月前
不负岁月 (作者) 4个月前
sanders

有没有一种可能跟 laravel 的定时任务机制吃不吃资源没有关系 :sweat_smile:

建议从三方面入手:

  1. 针对时效性要求较高的请求响应逻辑,检核代码中阻塞的位置,进行优化;
  2. 采用定时和队列意味着执行所需数据时效性要求较低,尽量避免跟请求响应逻辑争夺数据访问资源,可以安排业务低峰时段执行;
  3. 采用集群分库等方式将查询压力分摊,对于队列消费时效性要求的差异,也可以分拆控制队列消费者进程数量和优先级。
4个月前 评论
晏南风 (楼主) 4个月前
  • :rocket: 应用架构

    laravel 是单机部署还是多机,定时任务和页面加载是否在同一台服务器上,如果在,是否可以分开

    看楼上说 Mysql 已经读写分离,那就先假设是一主一从。

  • :alarm_clock:定时任务

    那执行任务里面大概逻辑是什么,查询+插入/修改 MySQL 吗,你说定时任务多,是意思定时操作MySQL频率大,任务也比较耗时啥的,所以占用资源多,影响页面的加载 ,是否这部分逻辑可以优化?

  • :link:页面加载

    页面加载数据,应该是只读吧,如果读的话,是不是可以加缓存。如果操作必须都是 MySQL,不采用缓存,是不是考虑从库的数量增多,或者MySQL 连接数增加,看一下相关监控服务,比如MySQL主库从库的 CPU 内存占用之类的。

另外要确定的是,是否是因为定时任务的某个时间大量执行,导致页面加载缓慢。?

4个月前 评论
晏南风 (楼主) 4个月前

查一下 慢查询日志,优化一下SQL

4个月前 评论
随波逐流

优化SQL, chunk, 队列

4个月前 评论

检查定时任务相关进程 内存占用情况

4个月前 评论

定时任务不是cli跑的吗?跟fpm没关系吧

4个月前 评论
Imuyu 4个月前

解决问题的前提是知道问题是啥,可以使用一些性能分析工具来分析。

4个月前 评论

先确定是数据库服务器占用高了, 还是web服务器占用高

4个月前 评论

看看占用cpu高的任务是数据库还是逻辑代码,就可以优化了,其实很多任务,例如加入到队列的任务,分开消费要很多次,可不可以把有的任务,可以批量处理的变更为批量处理。

4个月前 评论
Complicated

这个跟定时任务多少没关系吧,还是定时任务里代码写的,有好资源的操作,优化下定时任务里面的代码吧

4个月前 评论

我现在把消费队列放在新的容器里去跑了 能好了那么一丢丢

4个月前 评论
  1. 定时任务使用的是cli,和fpm没关系
  2. 同一个数据库 网页加载不出来 搞不懂这俩之间有啥必然联系。我估计是一台服务器把所有东西都装上了那种操作,这里建议把数据库独立出去呢,比如买一个阿里云的rdms。
  3. 如果觉得服务器卡,请确认一下服务器配置是否用的最低的1c1g版本,建议升级下配置,或者查看服务器是否有不知名脚本在运行。
  4. 暂无其他,结束。
3个月前 评论

把数据库索引字段重新整理和加了索引 现在嘎嘎嘎快 :kissing_heart:

3个月前 评论

看看跑任务的时候cpu哪里占用了,数据库高优化数据库,服务器高就单独搞个跑任务的服务器

3个月前 评论
晏南风 (楼主) 3个月前

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