出bug了

如标题所示,用户资金获取失败,线上某个服务通过dubbo调用接口都返回异常。
赶紧连上服务器看日志,进去一看吓到了。

 Cause: java.sql.SQLException: connection holder is null
; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; connection holder is null; nested exception is java.sql.SQLException: connection holder is nullat org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)at com.sun.proxy.$Proxy23.selectOne(Unknown Source)Caused by: java.sql.SQLException: connection holder is nullat com.alibaba.druid.pool.DruidPooledConnection.checkStateInternal(DruidPooledConnection.java:1155)at com.alibaba.druid.pool.DruidPooledConnection.checkState(DruidPooledConnection.java:1148)at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:336)at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java:75)at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java:85)at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java:57)at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:73)at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:59)at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77)at sun.reflect.GeneratedMethodAccessor223.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3143)at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3597)... 86 more

分析问题

全部是数据库的连接获取不到,技术栈说明下。我们是dubbo远程调用,数据库连接池是druid,数据库用的是mysql。
登录mysql 服务器 show full processlist 命令查,未发现异常。再查看mysql超时设置。
客户那边一直再催问题,没办法先重启这个台服务看看。先重启了一台机器发现好了,难道重启之后释放掉了?

万能大法,重启起效了?不行得找到根本到原因不然下一次肯定还有报这种错误。
查看Druid 的配置文件


<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close" ><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="select now()" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="removeAbandoned" value="true" /><property name="removeAbandonedTimeout" value="1800" /><property name="logAbandoned" value="true" /></bean>



removeAbandonedTimeout 这个配置是1800秒30分钟。由于我们是整站拆分了多个服务,每个服务还有多个节点。
都连接的同一个数据库实例,数据库的连接数都是固定的。应该是removeAbandonedTimeout ,超时时间设置的问题。
当一个连接用法,不是立马释放,生产环境配置的是30分钟,当多个服务同时取拿数据库的连接释放的时间都是30分钟。
再有数据库请求过来连接拿不到,连接池就会爆掉,以下代码是释放不需要的连接。


public int removeAbandoned() {int removeCount = 0;long currrentNanos = System.nanoTime();List<DruidPooledConnection> abandonedList = new ArrayList<DruidPooledConnection>();activeConnectionLock.lock();try {Iterator<DruidPooledConnection> iter = activeConnections.keySet().iterator();for (; iter.hasNext();) {DruidPooledConnection pooledConnection = iter.next();if (pooledConnection.isRunning()) {continue;}long timeMillis = (currrentNanos - pooledConnection.getConnectedTimeNano()) / (1000 * 1000);if (timeMillis >= removeAbandonedTimeoutMillis) {iter.remove();pooledConnection.setTraceEnable(false);abandonedList.add(pooledConnection);}}} finally {activeConnectionLock.unlock();}

总结

此次关于数据库都连接池的问题,暂时先改了超时的时间。观察了下还没发现再有此错误,等后续问题记录下来分享。

赶紧的,用户已经打电话来投诉线上出问题了相关推荐

  1. 线上出bug了?别怕,这么定位!

    小编推荐: Fundebug提供JS.微信小程序.微信小游戏,Node.js和Java错误监控.真的是一个很好用的错误监控服务,众多大佬公司都在使用. 摘要: Source Map还是很神奇的. 原文 ...

  2. 线上出 BUG 原因竟是 Spring 父子容器,反手我就去扒了它的底裤

    J3 Spring(父子容器 # BUG) 1.事情的缘由 一天,J3接到个小需求,对进入数据库的数据线索做拦截处理.进入数据库的数据具体要做三个渠道校验A.B.C而这三个渠道的校验规则都各不相同,只 ...

  3. 杨彪 | 一次线上游戏卡死的解决历程(文末赠书福利)

    题图:StartupStock@Pixabay 编辑:冷锋 作者:杨彪 本文首发于简书云时代构架杨彪 http://www.jianshu.com/p/7885bbf153f5 事故的发生详细过程 故 ...

  4. 一次线上游戏卡死的解决历程

    GitChat 作者:杨彪 原文:一次线上游戏卡死的解决历程 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 [不要错过文末活动] 事故的发生详细过程 故事是发生在几个月前的线上真实案例 ...

  5. 现在很多的企业都有自己的线上商城,那该怎么运营企业自己的线上商城呢?

    线上商城建立不难,但是线上商城运营起来却并不简单,据统计越有五成的企业建立了自己的线上商城,但有效进行线上商城运营的企业不到一成,因此如何有效的进行线上商城运营是许多企业面临的难题. 一般来说要做好线 ...

  6. 线上日志集中化可视化管理:ELK

    本文来自网易云社区 作者:王贝 为什么推荐ELK: 当线上服务器出了问题,我们要做的最重要的事情是什么?当需要实时监控跟踪服务器的健康情况,我们又要拿什么去分析?大家一定会说,去看日志,去分析日志.是 ...

  7. 【干货分享】如何应对线上数据库的误操作

    最近经常遇到开发同学在线上误操作数据,有的是误操作了一张表下的某些数据,还有的是表被删掉了,甚至也有整个库被误删.开发同学遇到这种情况通常是匆匆忙忙的找到DBA,问问有没有补救的办法,这时候DBA则会 ...

  8. 百度单测生成技术如何召回线上服务的异常问题?

    导读:线上系统异常问题一直以来都是使人"闻风丧胆"的,传统手段在解决这类问题时面临着相应的技术瓶颈.基于此,探索基于单元测试召回异常问题的方法,实现了一套通用且无人参与的单测生成系 ...

  9. SSM基于java的线上阅读平台的设计与实现 毕业设计-附源码291023

    SSM线上阅读平台开发 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用 ...

最新文章

  1. 字节、半字、字对齐方式
  2. web项目404错误统一跳转
  3. iOS 正确选择图片加载方式
  4. MFC让窗口最前端显示
  5. sql数据库连接不上本地数据库的解决办法
  6. 非零矩阵A可以写成某个列满秩矩阵与某个行满秩矩阵的乘积
  7. 零基础Python完全自学教程:1.认识python
  8. Excel取整函数汇总
  9. python批量处理照片为可打印的黑底白字图片
  10. 小程序-JAVA服务端解密与微信绑定的手机号
  11. linux删除卸载npm,卸载安装node npm (Mac linux )
  12. wifidog+authpuppy认证流程详解
  13. tomcat 配置域名和ssl证书
  14. 2018年结婚大数据来了:深圳离婚率高居第三,原因竟然是……
  15. Vue2.0高仿饿了么核心模块移动端Web App项目爬坑(一)
  16. 微软声学回声消除demo AECMicArray的使用
  17. 2008年世界顶级防火墙排名
  18. 本地 paraview 查看节点数据
  19. 基于CDMA网络的自来水厂水井生产监控系统通信解决方案
  20. 爱因斯坦都不敢想象, 我们真的探测到引力波

热门文章

  1. iOS开发_直播技术_前提准备
  2. Zjh游戏(十三)获取用户信息
  3. 2022年全球市场核医学放射性药物总体规模、主要生产商、主要地区、产品和应用细分研究报告
  4. NIO 实现大文件切割
  5. android系统日志的输出方式
  6. Mybatis实现自定义分页插件
  7. Android内存与性能优化
  8. python开发鸡兔同笼
  9. Hadoop 入门级
  10. linux查看用户ulimit,linux下关于ulimit