逍遥魔兽服务端报错mysql server has goneaway什么意思 away

某次测试发现程序失去响应。甴于程序集成了EurekaLog组件弹出了错误框。查看其给出的Call Stack信息发现没有发生线程死锁(DeadLock=0;),问题在于 Wait Chain=找不到指定的程序

查看任务管理器,發现程序占用300多个线程耗用100多M内存,但cpu耗用为0. 似乎停止了在等待什么

那么究竟是什么程序找不到呢?EurekaLog提供的信息中并未提供由于程序已经失去反应,也得不到其它具体信息

但可以发现出错时执行的是数据库操作。因此可以从数据库入手。

程序使用Mysql数据库因此首先连上数据库查看有无反应。发现可以正常连接使用因此数据库方面不存在问题。

那么是不是程序对数据库的连接被拒绝了呢采用Navicat查看服务器监控中的进程列表,发现连接是存在的但连接时间明显不对,才61秒显然是刚刚建立起来的连接。

而且伴随着建立新连接出現了SQL语句。

 显然程序试图连接上DB后,运行此查询语句但却因为此查询语句被DB给强行断开了。于是程序不断尝试连接DBDB不断强行断开,形成死结程序被阻塞在数据库操作上。

到网上查询为什么MySQL会强行断开程序的连接看到有以下说明:

既然猜测程序无反应的原因在于查詢结果集太大,那么就修改数据库删除一部分数据。

当删除完成后发现程序自动恢复运行了,主界面也正常出现了可见原因就出现茬查询结果集大小超出max_allowed_packet值。

顺便说一句当程序恢复后,主界面上的日志显示了运行错误信息:

对于出现的问题显然关系到程序和数据庫两个方面,因此也应该从这两方面来解决

1),程序应避免将大量数据取到前端执行操作SQL查询要进行优化。

2)数据库要根据使用要求修改配置参数值,一般可以将max_allowed_packet加大到20M

用Python写了一个http服务需要从mysql读数据庫,第一天还好好的第二天突然不行了。报错如下:

查了资料才知道因为你的程序长时间没有去数据库取东西,mysql自动把你的连接断开叻默认是8个小时。

相关参数可以这样查看:

当然其他参数也可以这样改

参考资料

 

随机推荐