Communications link failure

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

The last packet successfully received from the server was 217,272 milliseconds ago.  The last packet sent successfully to the server was 1 milliseconds ago.

 

做报表的批处理任务一直运行的好好的,但这几天接连出现了上面的异常,查阅了网上好些资料,大部分都说是由于wait_timeout和interactive_timeout参数设置得比较小导致mysql服务器端关闭了连接引起的。查看了mysql的设置,这两个均设置为180(3分钟),正常情况下,这个设置是没有什么问题的,可以减少数据库服务器的负荷。

当然可以根据网上的设置把这两个参数设置到小时级别,就可以解决这个问题。可是这样,很多无效的连接就长时间的和数据库服务器连接着,大大的增加了服务器的负荷。

换个方向考虑,是什么原因导致该数据库连接空闲了超过180秒的时间?原来是由于这个数据库连接和hive的数据库连接从程序入口开始就已经从连接池里拿了出来,然后先出来hive的查询操作,再执行mysql的操作,由于数据量不断增加,hive的查询时间不断加长,处理时间超过了180秒,导致mysql的连接被服务器断开了,所以就导致了这个问题出现。

正确的做法应该是有需要的时候才从连接池获取连接,而不是一开始就先从连接池获取连接,然后空置,从而引致异常。这样做一来不会引起资源浪费,二来不会导致程序异常。

 

以此记录,避免以后犯这种低级错误。

转载于:https://my.oschina.net/u/3441907/blog/1575099

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值