laravel 5.3 用 database 作为 queue 的 driver 时, mysql 内存占用非常高,导致服务器经常性崩溃

2017-02-10 15:33:21 +08:00
 solaro

laravel 5.3 的 queue 用 database 来进出队列,但是 mysql 的负载一直很高,动不动就挂,甚至整个 vps 都挂

用的是 lnmp 一键包, laravel 每分钟都在跑 queue , queue 主要用途是用来发邮件 vps 配置 KVM 1G 内存 25G ssd

top :

Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie Cpu(s): 1.4%us, 0.7%sy, 0.0%ni, 0.0%id, 96.3%wa, 0.3%hi, 0.3%si, 1.0%st Mem: 1020332k total, 959420k used, 60912k free, 424k buffers Swap: 262140k total, 262140k used, 0k free, 268552k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2489 mysql 20 0 1371m 472m 1804 S 0.0 47.4 0:01.18 mysqld 2561 root 20 0 345m 30m 19m S 0.0 3.1 0:00.46 php 2591 root 20 0 345m 30m 19m S 0.0 3.1 0:00.42 php 2627 root 20 0 345m 30m 19m S 0.0 3.1 0:00.37 php 2661 root 20 0 345m 30m 19m S 0.0 3.1 0:00.33 php 2697 root 20 0 345m 30m 19m S 0.3 3.1 0:00.28 php 2731 root 20 0 345m 30m 19m S 0.0 3.1 0:00.41 php

难道改用 redis 吗?默认的 queue driver 是 sync ,但是 sync 无法满足我的需求,所有发送成功失败都要记录

2022 次点击
所在节点    问与答
5 条回复
Dlad
2017-02-10 16:55:08 +08:00
1 、业务量要给,就算 4 核 16G 也有它的极限;
2 、 mysql 崩溃是因为执行语句多,还是执行语句慢?

基于你给的数据,我找不到问题所在, redis 可以试试。
tcsky
2017-02-10 17:55:47 +08:00
你队列消费时是不是有失败重试? 死循环了
ovear
2017-02-10 19:11:37 +08:00
lz 。。你没发现你的内存炸了么, swap 都满了。。
MySQL 配置问题吧
changwei
2017-02-10 21:04:01 +08:00
你先 show process 看看是不是服务器本身有大量已打开链接,或者开一下 general_log ,观察一下你的服务器在何时被什么 ip 请求过什么 sql 查询,然后再做优化,从 top 信息我看不出什么名堂。。。感觉被 cc 攻击了也有可能会这样
solaro
2017-02-15 10:26:38 +08:00
@tcsky laravel 框架会自动重试。问题找到了,不在于用的是 database 还是 redis ,改用 redis 后一样挂。在于 php 执行 schedule 后,没有自动销毁进程,每分钟都在产生 php 进程,然后 30 分钟后 1G 的内存全爆了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/339574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX