项目是一个数据同步项目,线下Android客户端把本地sqllite数据提交到云端队列,php做守护进程消费队列,以同步数据。初测没有问题,可是时不时出现诡异的崩溃,因为设置了错误邮件报警,发现错误代码如下:

PHP Warning 'yii\base\ErrorException' with message 'Error while sending QUERY packet. PID=45905'

in /home/muffycat_takeout/vendor/yiisoft/yii2/db/Transaction.php:121

Stack trace:

#0 [internal function]: yii\base\ErrorHandler->handleError(2, 'Error while sen...', '/home/muffycat_...', 121, Array)

#1 /home/muffycat_takeout/vendor/yiisoft/yii2/db/Transaction.php(121): PDO->beginTransaction()

#2 /home/muffycat_takeout/vendor/yiisoft/yii2/db/Connection.php(663): yii\db\Transaction->begin(NULL)

#3 /home/muffycat_takeout/takeoutapi/models/DishesModel.php(108): yii\db\Connection->beginTransaction()

#4 /home/muffycat_takeout/takeoutapi/service/meituan/DishService.php(76): takeoutapi\models\DishesModel::addDisheMapping(Array, '234', 1)

#5 /home/muffycat_takeout/console/controllers/DishController.php(49): takeoutapi\service\meituan\DishService->sync()

#6 [internal function]: console\controllers\DishController->actionSync()

#7 /home/muffycat_takeout/vendor/yiisoft/yii2/base/InlineAction.php(55): call_user_func_array(Array, Array)

#8 /home/muffycat_takeout/vendor/yiisoft/yii2/base/Controller.php(154): yii\base\InlineAction->runWithParams(Array)

#9 /home/muffycat_takeout/vendor/yiisoft/yii2/console/Controller.php(128): yii\base\Controller->runAction('sync', Array)

#10 /home/muffycat_takeout/vendor/yiisoft/yii2/base/Module.php(454): yii\console\Controller->runAction('sync', Array)

#11 /home/muffycat_takeout/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('dish/sync', Array)

#12 /home/muffycat_takeout/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('dish/sync', Array)

#13 /home/muffycat_takeout/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))

#14 /home/muffycat_takeout/yii(27): yii\base\Application->run()

#15 {main}

然而查看代码,此处的查询sql并没有问题,然后用搜索引擎检索,发现原来mariadb有个一个长链接的超时限制(wait_timeout),默认呢是8个小时,

效果类似于session,如果你在8小时内,有指令不断执行,则不会过期,如果超过8个小时没有任何指令,则mariadb就会断开链接, 可以使用如下命令查看数据库的此参数

show global variables like 'wait_timeout';

想要改变该值做测试,则可以执行如下的指令,该参数的单位为秒(默认为:28800):

set global wait_timeout=300

知道原因后,就可以有办法解决了,这里提供两个方法:

1.即使没有消费队列的需求,也定时的发送一个ping指令给数据库,这样就可以永远不过期,参考的php函数为:mysqli_ping

2.当队列有新数据要消费时,链接数据库,如果没有新数据,进程睡眠期间就主动断开链接,待发现新数据要消费时,重新链接数据库

选择定时ping还是主动重连,应该根据实际业务量来自己衡量,毕竟一直占着茅坑不好,而重链呢又要消耗资源不是?

mariadb 长链接时间限制导致队列消费进程崩溃的更多相关文章

  1. MySQL的8小时连接超时时间,导致系统过夜即崩溃,报错Could not roll back Hibernate transaction

    2014年3月开始给单位开发<机关规范化管理网络平台>,10月底成功上线运行,但是存在一个bug: 部署环境: apache tomcat 6.0.41 + mysql5.5 + jbpm ...

  2. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  3. 【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间

    原文网址:http://bbs.eeworld.com.cn/thread-438571-1-1.html /*                         * 通过使用if(gatt==null ...

  4. 防止shell脚本长时间执行导致ssh超时

    在一些对安全性要求较高的场景下.ssh的超时时间是管理员预先设置好的,在闲置一段时间后ssh连接会自己主动断开. 这样的情况下假设通过ssh运行脚本,而脚本运行时间又比較长的话.会导致sshclien ...

  5. 纯Socket(BIO)长链接编程的常见的坑和填坑套路

    本文章纯属个人经验总结,伪代码也是写文章的时候顺便白板编码的,可能有逻辑问题,请帮忙指正,谢谢. Internet(全球互联网)是无数台机器基于TCP/IP协议族相互通信产生的.TCP/IP协议族分了 ...

  6. 基于kafka-net实现的可以长链接的消息生产者

    今天有点时间,我就来说两句.最近接触的Kafka相关的东西要多一些,其实以前也接触过,但是在项目使用中的经验不是很多.最近公司的项目里面使用了Kafka消息中间件,由于以前的人员编写的客户端的类不是很 ...

  7. php长链接

    php 连接 mysql 是分为两步走的第一步:建立 php 到 mysql 服务器的 tcp/ip 通道 物理通道第二步:登录 mysql 服务器,建立到数据库的通道 逻辑通道 无论是长连接还是短连 ...

  8. PHP实现新浪长链接转化成短链接API

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

  9. 微信公众号开发C#系列-10、长链接转短链接

    1.概述 短网址的好处众多,便于记忆,占用字符少等,现在市面上出现了众多的将长网址转变为短网址的方法,但是由于他们都是小的公司在幕后运营,所以很不靠谱,面对随时关闭服务的可能,这样也导致我们将转换好了 ...

随机推荐

  1. React实例----一个表单验证比较复杂的页面

    前言:这阵子看了两本CSS的书~对于CSS层叠,定位,继承等机制基本上都了解了,就想着自己写几个页面~正好自己就写了写CSS样式,然后用React渲染出来~ 闲话不多说,简单说一说这个页面,希望能对大 ...

  2. 通过oledb驱动读取excel、csv数据丢失解决方案

    1.问题出现 在开发应用程序的过程中,比较常用一功能就是通过oledb驱动读取excel.csv.text等文件:而最近有客户反映,在使用短信平台(下载地址:http://www.sms1086.co ...

  3. 【排序算法】快速插入排序算法 Java实现

    基本思想 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部插入完成. 设数组为a[0...n-1] 初始时,a[0]自成一个有序区,无序区为a[1...n-1] ...

  4. ABP 学习汇总

    本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...

  5. 前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap ...

  6. i春秋与我

    在i春秋论坛混迹了大半年了,在i春秋的在线平台学到了很多奇技淫巧,特别喜欢这个平台的气氛,以及虚拟在线网络环境的搭建, 忙周偷乐,过来也为i春秋做点小奉献,共同构造我们喜欢的春秋平台,成长特别快,特别 ...

  7. macOS apache配置及开启虚拟服务器的开启,apache开启重写模式

    今天把自己的mac系统升到最新版,但是,apache却不能用了,因为mac上的apache是系统自带的,因为是mac目前的最新系统,所以出现了好多问题,整理了一下午也没有啥进展,最后还是把原来的在云盘 ...

  8. 入坑系列之HAProxy负载均衡

    在大型系统设计中用代理在负载均衡是最常见的一种方式,而相对靠谱的解决方案中Nginx.HAProxy.LVS.F5在各大场中用得比较普遍,各有各的优势和使用场景,由于本次要使用到TCP,因此Nginx ...

  9. 关于IE低版本兼容问题

    1,元素浮动之后,能设置宽度的话就给元素加宽度.如果需要宽度是内容撑开,就给它里边的块元素加上浮动: 解决方案:给需要宽度由内容撑开的元素加上浮动 css样式: <style> .box{ ...

  10. javascript解析机制、闭包详解

    js解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字: 2.用var定义的变量的名 ...