在用BoneCP的时候,发现一个JVM日志中报了一个异常,大意是“探测(detect)到有数据库链接没有关闭”(不得不说JVM的强大),但是我用的是连接池里面的链接啊,怎么会需要关闭呢?
有问题首先找官网。
于是我上官网又看了一遍Demo,但是只是一个简单的Demo,历史的BoneCP的sample的链接都没有了(Server Internal Exception)当时也没有多想,后文会有解释。根据Demo来看用完之后确实close了,而且fianlly里面连整个连接池都关闭了;所以讲他只是个Demo,只是描述了在使用一次情况下的处理。
官网解决不了google。
而且最好是中文搜索,BoneCP connection close;果然,第一个就是stackoverflow里面的人提问。点机一看,里面点赞最多的一个回答需要关闭,但是Connection的关闭并不会关闭物理连接,只是将链接还回了缓冲池,读到这里,我恍然大悟,一致看到Connection就以为是原生的Connection,看到close就以为是关闭物理连接。我想到了在debug代码的时候,缓冲池返回的connection其实是ConnectionHandle,当时心理曾经闪过一丝困惑,这里明白了,结果之前看到的源码Connection其实就是一个interface;但是你通过Driver获取的Connection则是一个代理,这个代理的close可是会真切的关闭链接。
看到网上的答案后,还要验证一下。
之前和汪洋有一个乌龙,我们讨论了一下Cloudera里面spark的agent的作用,我是一个论坛上看到过一个回帖,说是agent就是cloudera magager的一个埋点,用于监控服务;于是我坚持agent就是监测埋点;但是汪洋则说他们在实际部署的时候发现只有部署了spark agent才能够执行spark-submit;后来我问了一个cloudera内部人员,他的解释和汪洋是一样。
所以,网上获得答案后,一定要找别的渠道再验证一下。于是我看了一下BoneCP的源码,确实close函数里面没有半毛钱的关闭链接,只是修改了一些列的状态,应该就是在连接池中标记该链接是free的。
沟通,交流。
我觉这次调研还是有意义的,毕竟觉得看到close,到最后才发现其实close并不是想象的样子“你看到的,未必是你看到的样子”,我简单的描述了一下调研过程,发到了朋友圈。一个之前的同事回复了一句:为什么不用durid?其实Jeesite里面的缓冲池配置的就是Druid,当时没太在意;之前没用过。
这个朋友圈发出去之后,确实有收获,之前一直纠结要不要再朋友圈曝光,今天这番事件,应验了老罗曾经说的:一件事情说不好做还是不做,那就做,可能会有意外收获。
扩展,关于深度和广度
保持对技术的敏感度,其实那个同事建议后,我便尝试了解一下Druid以及BoneCP,看到了一篇很好的文章讲述这些缓冲池的历史,其中降到了BoneCP其实已经被作者放弃了,因为他又开发了一个更加高速的缓冲池。看到此处我不禁汗颜,因为官网已经去过,但是并没有注意这些事情,我再二次去网站的时候才看到他的最后一次更次年log是在2013年,去了github的挂网看到了下面的一段话:
BoneCP is a Java JDBC connection pool implementation that is tuned for high performance by minimizing lock contention to give greater throughput for your applications. It beats older connection pools such as C3P0 and DBCP but SHOULD NOW BE CONSIDERED DEPRECATED in favour of HikariCP
.我觉得研究一个技术除了技术本身,比如技术机制之外,如果是你关注的你还要关注几个维度,活跃度,受欢迎程度,代码质量。通过一些途径比如官网,github等来对于这个技术的周边进行了解。就像李红光关注操场草坪一样,因为这些都是会加深你对于这个产品的了解,就像搞对象要从各个渠道来了解一样;所以,研究技术就要想找媳妇一样。
上面说的是深度,再就是广度,当初看到了jeesite配置里面的Druid其实应该研究一下才对,这样将会对于你有更加宽泛的选择。

一个detect问题引发的一系列思考的更多相关文章

  1. 由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

    背景   我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的 ...

  2. @Autowired 引发的一系列思考

    关于Java注解 注解定义 标记注解 - 没有元素 @interface Marker { } 单元素注解 - 只有一个元素 @interface Single { String value() de ...

  3. iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  4. Feign 400错误引发的一系列问题

    Feign 400错误引发的一系列问题 问题介绍 在使用Feign进行远程调用的时候出现非常奇怪的400错误,错误信息大概如下: feign.FeignException: status 400 re ...

  5. 一个purge参数引发的惨案——从线上hbase数据被删事故说起

    在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司误用puppet参数引发的事故,而且这个参数我也曾被“坑过”.   ...

  6. 【深入浅出.Net IL】1.一个For循环引发的IL

    .Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 1.准 ...

  7. 在centos服务器上配置gitlab钩子引发的一系列问题

    为了给公司的服务器上搭建gitlab环境并且配置钩子(实现在本地git push之后服务器自动git pull),整了好久,最后终于把问题解决了,下面是记录安装gitlab之后引发的一系列问题: 首先 ...

  8. Mysql中where条件一个单引号引发的性能损耗

    日常写SQL中可能会有一些小细节忽略了导致整个sql的性能下降了好几倍甚至几十倍,几百倍.以下这个示例就是mysql语句中的一个单引号('')引发的性能耗损,我相信很多朋友都遇到过,甚至还在这样写. ...

  9. Spring 循环引用(一)一个循环依赖引发的 BUG

    Spring 循环引用(一)一个循环依赖引发的 BUG Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 循环 ...

随机推荐

  1. HDU 1159 Common Subsequence 动态规划

    2017-08-06 15:41:04 writer:pprp 刚开始学dp,集训的讲的很难,但是还是得自己看,从简单到难,慢慢来(如果哪里有错误欢迎各位大佬指正) 题意如下: 给两个字符串,找到其中 ...

  2. MFC 任务管理器设计

    在学习界面设计,因为对一些控件不熟悉,所以也参考了别人的.核心代码如下. void CTasklistDlg::Expand() { m_list.SetExtendedStyle(LVS_EX_GR ...

  3. Sqrt(X),求平方根,折半查找

    算法分析:利用折半查找,降低算法复杂度.前面求x得y次幂,也是将y/2,都是为了降低复杂度. //折半查找的思想 public class Sqrt { public int sqrt(int x) ...

  4. JNI_Z_08_创建Java对象

    1.步骤 : (1).获取 jclass (2).获取 构造函数的 method id (方法的名称始终为"<init>") (3).创建Java对象的两种方式: (3 ...

  5. bower 安装

    安装Yeomannpm install --global yo搭建一个web应用脚手架,你将需要安装generator-webapp生成器:npm install -g generator-webap ...

  6. angular一些常用的方法:

    angular.copy(); 用法:对Object对象的深度拷贝$scope.data = {name:'yanjinyun',age:'11'}; $scope.origData = angula ...

  7. 7zip 自解压安装程序

    包含自解压安装器的包https://jaist.dl.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920_extra.7z详细说明见7-zip帮助文档的 ...

  8. cassandra压力测试

    http://docs.datastax.com/en/archived/cassandra/2.2/cassandra/tools/toolsCStress.html?hl=stress Simpl ...

  9. maven pox.xml文件报错解决办法 亲测可以

    问题1 由于maven下载依赖包失败导致一些文件没完全下载下来,形成了lastUpdated结尾的文件存放在本地仓库中(我是默认地址:C:\Users\Administrator\.m2\reposi ...

  10. 2017.2.9日总结--外网IP和内网IP

    Linux自己不能通过自己的外网访问自己必须通过内网访问自己