ActiveMQ:Communications link failure问题以及解决办法

ActiveMQ版本:5.5.1

MQ 所使用的 MySQL 是 InnoDB存储引擎

记录人:@郑昀

现象:

业务表面现象:无。系统现象:无。

日志信息:业务系统发送 MQ 消息时,下面这种错误日志断断续续地一直都有:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

 

The last packet successfully received from the server was 60,001 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.

 

原因:

ActiveMQ 持久化方案我们选的是 MySQL 。

MySQL 的全局变量 wait_timeout 默认是28800,单位是秒,即8小时。

运维部早先在测试 ActiveMQ 5.5 主从方案时,发现当 Master 宕机后,锁(数据库里的一个排他锁)有可能没有释放,导致 Slave 无法成为 Master(这是 ActiveMQ 5.5 的 BUG,已在 5.6.0和5.7.0 修复)。

所以运维部将 wait_timeout 参数调短为了60秒,希望能加速锁释放。

当业务不繁忙时,也许会有60秒既不生产也不消费,因此 MySQL 主动断开了 Connection 。此时,如果作为 MySQL Client 身份的 Broker Service,它的数据库连接池对 连接断开检测和自动重连 做得不好的话,那么 Broker 首次访问 DB 时 jdbc 就会报错。

 

短期解决办法:

将 ActiveMQ 所使用的 MySQL 的全局变量 wait_timeout 恢复为默认值 28800 。(已完成)

 

中期解决方法:

将 ActiveMQ 升级到 5.6.0或5.7.0 稳定版本。


相关的BUG:

ActiveMQ 的缺陷单 AMQ-1958 报告:

JDBC master/slave deadlock when connection is lost      

影响版本: 4.1.2, 5.0.0, 5.1.0, 5.2.0

Fix版本:5.6.0

状态:2012年4月17日已修复

描述:

在一个纯 JDBC Failover 场景下(1 Master+1 Slave):如果 Master 失去了数据库网络连接,数据库里的锁将不会释放。这样 Slave 不知道 Master 已不能执行任务,Slave 仍尝试不断获取锁;当 Master 重启后,它自己也无法获得锁,于是变身为 Slave;结果就是 0 Master+2 Slave 

环境:Oracle 10,MySQL 5

(这也就是运维部在 ActiveMQ 5.5.1 测试场景所遇到的)

 

AMQ-3654 也报告类似问题:

JDBC Master/Slave : Slave cannot acquire lock when the master loose database connection

影响版本:5.5.0

Fix版本:5.7.0

状态:2012年6月13日已修复

描述:与 AMQ-3654 描述一样。只不过报告的版本号不一样。

 

 


参考资源:

1)火丁老王,MySQL里的wait_timeout

『wait_timeout 过大有弊端,其体现就是 MySQL 里大量的 SLEEP 进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题。』

『在MySQL命令行里通过SET来设置即可,避免服务重启:

mysql> set global wait_timeout=60;』

『查有无生效,用 show global variables 查全局变量:

mysql> show global variables like 'wait_timeout';

单纯使用 show variables 的话就等同于使用的是 show session variables,查询的是会话变量,你会误以为设置没有生效。

2)iteye,关于 MySQL 的 wait_timeout 连接超时报错解决方案

3)AMQ-1958

4)以前有人提议在数据库连接字符串中增加autoReconnect=true&failOverReadOnly=false,但这只对 MySQL 4.0 以前的版本有效,对 MySQL 5.0 以后无效。

5)ActiveMQ JDBC Master Slave帮助

Master failure

If the master looses connection to the database or looses the exclusive lock then it immediately shuts down. If a master shuts down or fails, one of the other slaves will grab the lock and so the topology switches to the following diagram

6)wait_timeout 参数说明

『参数含义:服务器关闭非交互连接之前等待活动的秒数。

在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。 

参数默认值:28800秒(8小时)』

时间: 2024-08-02 18:12:08

ActiveMQ:Communications link failure问题以及解决办法的相关文章

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 解决办法

09:00:30.307 [http-8080-6] ERROR org.hibernate.transaction.JDBCTransaction -JDBC begin failed com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 56,237,340 mi

配置- hive Communications link failure

问题描述 hive Communications link failure 在hive链接mysql作为数据源的过程中,配置conf下的hive-site.xml 文件,hive是装在Hadoop集群的master上,ip地址是192.168.1.154.mysql直接使用的sudo apt-get install mysql-server 安装的.使用netstat -nat 显示: 结果如下:然后我的hive 配置文件是:把ip地址换成localhost或者127.0.0.1 hive下 s

JDBC中的Communications link failure due to underlying exception错误

问题描述:使用JDBC连接Mysql数据库时,出现"Connection reset"错误,抛出如下异常: Connection couldn't be established to jdbc:mysql://***/***?user=***&password=******** com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** B

Communications Link failure

这个错误是因为数据库设置的wait_timeout和interactive_timeout两个参数时间比较短引起的,解决方案一个是延长这两个参数,另一个方法就是修改数据库连接池testOnBorrow参数,改为true即可解决问题. Mark一下

java-Communications link failure报错

问题描述 Communications link failure报错 The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 上网搜了,然后改了mysql的interactive_timeout,wait_timeout两个参数也重启了mysql为什么还是报同样的错误,非常郁闷!!!!!!!!!!

mysql-<SOS!!!> Communications link failureons

问题描述 <SOS!!!> Communications link failureons 自己做的第一个信息类网站,第一次访问主页时能够正确显示,但过几分钟后刷新该页面是就会报错:错误类型如下:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 1649969 m

【原创】源码安装 Atlas-1.0.3 遇到的问题以及解决办法

      今天 360 团队在 GitHub 上发布了 Atlas-2.0.0 版本.可喜可贺,希望 360 的开发团队能够一直保持下去.借此时机,将之前对 Atlas-1.0.3 的一些理解和使用,以博客形式总结一下.本文主要讲一下在源码安装和刚开始运行 Atlas-1.0.3 时可能遇到的问题.  =====  按照安装说明,Atlas-1.0.3 的安装有如下依赖项: glib(2.32.x).libevent(1.4以上).Lua(5.1.x).OpenSSL(0.9.8以上)  基本

电脑硬盘故障的解决办法

电脑硬盘故障的解决办法   常见电脑硬盘故障的解决办法 一.开机检测硬盘出错 开机时检测硬盘有时失败,出现:"primary masterharddiskfail".有时能检测通过正常启动.检测失败后有时在BIOS中能用AUTO DETECT重新设置,有时AUTODETECT又找不到硬盘. 请按以下顺序检查:检查硬盘线是否松动;换一根好的硬盘线试试. 把硬盘换到其他机器上试试, 换一块主板--确认IDE口没问题. 也有可能是电源导致的问题,换一个质量好一些的电源.认真检查硬盘的PCB,

电脑开机常见的错误提示以及解决办法大全

在启动Windows 9x之前有字符提示的错误,属于非关键性的错误,它并不会导致整个硬件系统报废,屏幕有显示说明这台机器还有药可救.但是这是一类很严重的错误,如果不加以排除,系统往往不能正常启动.在下面为大家列出了电脑开机常见的错误提示以及解决办法大全,希望能够帮助到大家. 错误信息CH-2 Time ERROR 是主板时钟TIME #2发生错误时的出现的提示信息通常须更换主板 错误信息CMOS Battery State L0W 系统中有一个用于存放CMOS参数的电池该提示的意思是该电池已用完