Laravel怎样配置队列睡眠间隔优化CPU占用_Laravel配置队列睡眠间隔优化CPU占用方法【性能】

风杰酱_1106

风杰酱_1106

2026-04-11

177人浏览

原创

应通过调整 --sleep 参数、启用 --daemon 模式、配置 redis block_for、自定义轻量监听器及限制 --max-jobs/--max-time 来降低 laravel 队列 cpu 占用。

laravel怎样配置队列睡眠间隔优化cpu占用_laravel配置队列睡眠间隔优化cpu占用方法【性能】

如果您在运行 Laravel 队列工作进程时观察到 CPU 占用率持续偏高,即使队列为空也频繁出现峰值,则很可能是由于工作进程在空闲时轮询过于密集。默认的 queue:work 命令在无任务时会以极短间隔反复检查队列,每次检查均需加载 Laravel 框架上下文,造成大量重复开销。以下是优化队列睡眠间隔以显著降低 CPU 占用的具体方法:

一、使用 --sleep 参数调整空闲等待时间

该参数直接控制工作进程在未获取到新任务时的休眠时长,避免高频轮询。增大此值可线性减少每分钟框架加载次数,从而大幅缓解 CPU 压力。

1、停止当前正在运行的队列进程(如通过 supervisorctl stop laravel-queue)。

2、修改 Supervisor 配置文件中 command 行,添加 --sleep=5 参数,例如:php /var/www/project/artisan queue:work redis --sleep=5 --queue=high,default。

3、保存配置后执行 sudo supervisorctl reread && sudo supervisorctl update 重载配置。

4、重启队列进程:sudo supervisorctl start laravel-queue:*。

二、启用 --daemon 模式配合 --sleep 实现框架单次加载

--daemon 模式使工作进程在启动时一次性加载整个 Laravel 应用框架,并在后续所有任务处理及空闲等待中复用该实例,彻底消除每次轮询时的框架初始化开销。

1、确认 Laravel 版本为 4.2 或更高(Laravel 5.0+ 默认支持,且推荐使用)。

2、在 Supervisor 的 command 中同时指定 --daemon 和 --sleep=3,例如:php /var/www/project/artisan queue:work redis --daemon --sleep=3 --tries=3。

3、确保部署流程中包含 supervisorctl restart laravel-queue:* 步骤,以在代码更新后强制重启守护进程。

4、验证进程是否以守护模式运行:执行 ps aux | grep 'queue:work' | grep daemon,应可见对应进程存在。

三、切换至阻塞式队列驱动(Redis block_for)

对于 Redis 驱动,可通过启用阻塞读取机制替代轮询。当队列为空时,Redis 客户端将挂起连接直至有新任务入队或超时,完全消除空转 CPU 消耗。

1、打开 config/queue.php 文件,定位到 redis 驱动配置项。

Laravel
Laravel

避免常见的Laravel错误:N+1查询、批量赋值、缓存陷阱及队列序列化陷阱。

下载

2、在 'redis' => [...] 数组内添加或修改字段:'block_for' => 5。

3、确保队列命令不带 --sleep 参数(因阻塞逻辑已接管等待行为),例如仅运行:php artisan queue:work redis --queue=high,default。

4、确认 Redis 服务端未启用 notify-keyspace-events 冲突配置,以免干扰阻塞操作。

四、自定义轻量监听器替代 Artisan Worker

当上述标准方案仍无法满足严苛 CPU 限制(如低配 VPS)时,可绕过 Artisan 全栈加载,用原生 PHP + Pheanstalk 或 PhpRedis 编写极简监听器,仅解析任务并按需触发独立 Artisan 命令。

1、创建独立脚本 app/Console/CustomQueueListener.php,使用 Pheanstalk::reserve(5) 或 Redis::brpop() 实现阻塞等待。

2、解析取出的 JSON 任务数据,提取类名与参数。

3、通过 proc_open() 调用 php artisan app:handle-job {class} {data} 执行具体逻辑,子进程结束后自动释放资源。

4、将该脚本交由 Supervisor 管理,command 设为 php /var/www/project/app/Console/CustomQueueListener.php。

五、结合 --max-jobs 与 --max-time 实施进程生命周期控制

即使启用 --daemon,长时间运行的进程仍可能因内存泄漏或数据库连接失效导致隐性资源占用上升。通过限制单个进程处理任务数或运行时长,可强制其周期性退出并由 Supervisor 重启,维持稳定 CPU 占用水平。

1、在 Supervisor 的 command 行中加入 --max-jobs=250 和 --max-time=3600 参数。

2、确保 --max-time 值小于系统级超时限制(如 systemd 的 TimeoutSec 或 Supervisor 的 stopwaitsecs)。

3、设置 Supervisor 的 autorestart=true 和 startretries=3,保障进程退出后立即拉起新实例。

4、监控日志中是否出现 "Maximum job limit reached" 或 "Maximum time limit reached" 提示,确认机制生效。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

laravel

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

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2769

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2168

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1140

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1078

4

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

2023.09.05

1296

5

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

1998

7

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

2023.09.20

3080

8

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

2023.09.22

13475

6

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

529

3

热门下载

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

精品课程

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

共1课时 | 194人学习

Composer手册
Composer手册

共0课时 | 0人学习