Laravel怎么处理队列任务执行内存峰值监控_Laravel记录内存使用曲线【教程】

大瑶酱_2366

大瑶酱_2366

2026-05-07

458人浏览

原创

在 laravel 队列任务中应使用 memory_get_usage(true) 在 handle() 开头和结尾分别采样,取差值得到单任务真实内存增量,避免误用 memory_get_usage() 或 memory_get_peak_usage();oom 导致的静默退出需通过 dmesg 确认;cli 下 memory_limit 应按实测增量合理设置,如平均增 80mb 则设 256m,并配合 --max-time 防泄漏。

laravel怎么处理队列任务执行内存峰值监控_laravel记录内存使用曲线【教程】

怎么在 Laravel 队列任务里实时看内存用了多少

直接在任务执行中用 memory_get_usage(true) 拿当前内存占用,别用 memory_get_usage()(它不包含未释放的 PHP 内部分配,容易低估)。Laravel 的队列 worker 是长生命周期进程,内存只增不减是常态,光看“当前用量”没意义,得看“本次任务新增了多少”。

  • 在任务 handle() 开头记一次 memory_get_usage(true),结尾再记一次,差值才是这次任务真实内存增量
  • 别依赖 memory_get_peak_usage() —— 它返回的是整个 worker 进程启动以来的峰值,不是单个任务的
  • 如果任务里调了第三方 SDK 或大文件处理,记得在关键节点(比如解压后、JSON 解析完)插点采样,否则可能错过瞬时尖峰

Laravel 队列任务内存超限被 kill 怎么定位

Linux 下常表现为任务静默退出、日志里只有 Killed 二字,没有 PHP 错误或异常堆栈 —— 这是 OOM Killer 干的,不是 Laravel 或 PHP 报的错。

  • 先确认是否真被 OOM 杀:查系统日志 dmesg -T | grep -i "killed process",会看到类似 Killed process 12345 (php) total-vm:2.1g, anon-rss:1.8g
  • Laravel 日志里不会记录这个,failed_jobs 表也不会写入,因为进程被信号 SIGKILL 强制终止,连 __destruct() 都不执行
  • 临时加防护:在 handle() 开头加 ini_set('memory_limit', '512M')(注意单位必须带 M),比不设更可控;但治标不治本,得配合内存采样找泄漏点

用 Laravel Telescope 记录内存曲线靠谱吗

Telescope 默认不采集内存数据,要自己加扩展。它适合观测单次请求或任务的内存趋势,但对长周期队列 worker 不适用 —— 因为 Telescope 的 snapshot 是按 request/job 生命周期存的,而一个 worker 进程跑几百个 job,内存只涨不跌,曲线会一路冲高然后平掉,看不出单个任务波动。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载
  • 想用 Telescope,得在 JobProcessing 和 JobProcessed 事件里手动打点,把 memory_get_usage(true) 值塞进 Telescope::recordMessage()
  • 注意别在 JobFailed 里记 —— OOM 导致的失败根本进不来这个事件
  • 更轻量的做法:直接往自定义日志里写 CSV 行,比如 date("Y-m-d H:i:s") . "," . $jobId . "," . memory_get_usage(true) . "\n",后续用脚本抽数据画图

PHP CLI 模式下 memory_limit 设多少才合理

别盲目设成 -1 或 2G。CLI 的 memory_limit 是 per-process 限制,队列 worker 启多个进程时,总内存消耗是倍数关系。比如开 4 个 queue:work --max-jobs=100 进程,每个设 1G,极端情况下可能吃掉 4G 物理内存。

  • 推荐策略:根据单个任务实测内存增量设限,比如测出来平均新增 80MB,就设 256M,留足够余量但不过度宽松
  • php.ini 里的全局 memory_limit 对 CLI 无效,必须在启动命令里显式指定:php -d memory_limit=256M artisan queue:work
  • 用 --max-time=3600 配合内存监控更稳妥:避免某个任务缓慢泄漏,占着进程不放,拖垮整组 worker

内存监控真正的难点不在采集,而在区分“合理增长”和“异常泄漏”——比如一个任务读 100MB 文件,内存涨 120MB 是正常的;但连续跑 10 次,每次涨 15MB,第 10 次涨到 280MB,这就是典型泄漏。得靠增量对比 + 多次运行基线比对,不能只看单次数字。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

laravel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

857

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

835

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2508

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

4341

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

6270

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

4136

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

7769

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1476

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

215

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 213人学习

Composer手册
Composer手册

共0课时 | 0人学习