2015年11月19日
已经一个多月没有写东西了,不过最近确实很忙。前两天在线上碰到一个C3P0的链接死锁的异常,话说这个上古神物 ,我已经是很久不碰了。先贴异常
异常截图
"apparent deadlocks":名词解释是说c3p0拿到链接之后,最终使用之后没有返回到pool,导致死链检测失败。经过在stack Overflow检索,https://stackoverflow.com/questions/3730844/c3p0-apparent-deadlock-when-the-threads-are-all-empty.发现增加一个statementCacheNumDeferredCloseThreads该参数的定义,就可以避免这个问题。
经过查看官方文档:http://www.mchange.com/projects/c3p0/#statementCacheNumDeferredCloseThreads
解释:如果把该值设为超过1,statement的缓存就会自动跟踪当前可用的connections,如果没有再用,就会自动销毁掉。如果需要另外的线程来专门销毁缓存的statement,则还需要设置maxStatements与maxStatementsPerConnection。
再贴一个官方的说明:
Configuring Statement Pooling
c3p0 implements transparent PreparedStatement pooling as defined by the JDBC spec. Under some circumstances, statement pooling can dramatically improve application performance. Under other circumstances, the overhead of statement pooling can slightly harm performance. Whether and how much statement pooling will help depends on how much parsing, planning, and optimizing of queries your databases does when the statements are prepared. Databases (and JDBC drivers) vary widely in this respect. It's a good idea to benchmark your application with and without statement pooling to see if and how much it helps.
You configure statement pooling in c3p0 via the following configuration parameters:
maxStatements
maxStatementsPerConnection
statementCacheNumDeferredCloseThreads
maxStatementsis JDBC's standard parameter for controlling statement pooling.maxStatementsdefines the total numberPreparedStatementsa DataSource will cache. The pool will destroy the least-recently-used PreparedStatement when it hits this limit. This sounds simple, but it's actually a strange approach, because cached statements conceptually belong to individual Connections; they are not global resources. To figure out a size formaxStatementsthat does not "churn" cached statements, you need to consider the number offrequently usedPreparedStatements in your application,and multiply that by the number of Connections you expect in the pool (maxPoolSizein a busy application).
maxStatementsPerConnectionis a non-standard configuration parameter that makes a bit more sense conceptually. It defines how many statements each pooled Connection is allowed to own. You can set this to a bit more than the number ofPreparedStatementsyour applicationfrequentlyuses, to avoid churning.
If either of these parameters are greater than zero, statement pooling will be enabled. If both parameters are greater than zero, both limits will be enforced. If only one is greater than zero, statement pooling will be enabled, but only one limit will be enforced.
大概意思就是这两个,有一个值如果大于0,c3p0的statement pool就会发生作用。
以上所有的配置都是基于c3p0的最新版本。PS一下,还是2015年的JAR。
通过引入最新的C3P0包,另外增加了两段配置,线上观察两天,问题解决。
最后打个小广告,JAVA世界最快的JDBC连接池,非HikariCP莫属。已经甩c3p0好几个街角,有图有真像。
posted @
2017-11-10 15:25 alexcai 阅读(1785) |
评论 (0) |
编辑 收藏
摘要: 在word的处理之中,文字,各种类型的图片,最复杂的公式,之前编写的API基本都覆盖了。不过,昨天在做一个文档测试时,发现表格没有能很好的处理。
阅读全文
posted @
2017-08-25 15:54 alexcai 阅读(745) |
评论 (0) |
编辑 收藏
摘要: HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase、Hive这两个核心工具也随着Hadoop发展变得越来越重要。今天我们只初步的看看HDFS.
阅读全文
posted @
2017-07-24 10:35 alexcai 阅读(649) |
评论 (0) |
编辑 收藏
摘要: 使用thrift已经有段时间了,目前基本是clien+server的方式,负载是通过nginx来处理。这种处理方式有两个比较大的弊端:
阅读全文
posted @
2017-06-29 16:39 alexcai 阅读(865) |
评论 (0) |
编辑 收藏
www.taggerin.com,主要处理日常文档的在线编辑,以及与Markdown,PDF,html等格式的双向转换.听说内测版本已经发布。真正的文档在线编辑与预览。
posted @
2017-06-02 09:45 alexcai 阅读(697) |
评论 (0) |
编辑 收藏
摘要: 一般的业务开发,不会涉及到多种数据库类型的操作。因为,无论是对于开发,还是运维,成本都是非常高的。如果是ORACLE数据库到MYSQL的数据备份,目前我所了解的开源解决方案有2种:
阅读全文
posted @
2016-12-15 13:33 alexcai 阅读(1226) |
评论 (0) |
编辑 收藏
摘要: 作为日常支付业务,微信的接入逐渐进入了大家的视野。今天以PC端接入微信支付的基本流程来说明。
阅读全文
posted @
2016-07-26 11:59 alexcai 阅读(1426) |
评论 (2) |
编辑 收藏
摘要: 在WORD里面编辑公式,目前是有两种方法。
阅读全文
posted @
2016-07-15 08:30 alexcai 阅读(2166) |
评论 (1) |
编辑 收藏
摘要: 最近在弄项目的压测,首先想到把应用服务器TOMCAT的相关配置升级,网上看了很多关于TOMCAT升级的案例,于是结合自己的实际情况,做了笔记。
阅读全文
posted @
2016-07-08 09:50 alexcai 阅读(1541) |
评论 (2) |
编辑 收藏
摘要: 当我们淡到RPC服务框架,放眼世界范围,我目前知道的主流有thrift,fingle,grpc等。当然大型互联网公司都会有自己的RPC服务与治理框架。经过一段时间的调研,本着简单,高效的原则,最终选择thrift.具体原因,等接下来写到服务篇的时候再细说。
阅读全文
posted @
2016-06-29 18:14 alexcai 阅读(1515) |
评论 (2) |
编辑 收藏
摘要: 目前公司业务上,有课程直播这一块。为了增加用户的互动,需要增加聊天室功能。聊天室,对实时性有较严格的要求,所以考虑使用socketio来做。目前在服务端,有基于netty实现的websocketio的框架。https://github.com/mrniko/netty-socketio,这个作者还是挺厉害的(redisson的作者)。
阅读全文
posted @
2016-06-06 08:37 alexcai 阅读(3014) |
评论 (2) |
编辑 收藏
摘要: SOLR作为成熟的企业级检索服务,已经有些年头。我在5年前,也接触部分皮毛。当时跟另外一个同事,一起学习学运用到我们的产品之中,当时是面对的数据量是500-700百W,多表联合处理。然后通过SOLR,引入索引,再走日常的查询。大概也是在4年前,在入门MVN之后,通过MVN快速搭建了SOLR运行环境,几天前,又翻看了一下写的POM,觉得很有必要与大家进行一下REVIEW,温故而知新!我也对比了当前网上多如牛毛的SOLR搭建文章,总感觉我照着做,还是不会。当然,当时的POM,我是参照了国外一个大牛弄的,当时的SOLR版本是4.4.0.目前SOLR的6版本都出来,不过,需要JDK8以上。鄙人一直在用JDK7,所以,不考虑一下跨那么大,怕扯到蛋了。哈哈,玩笑话。另外由于之前分词,是用的jcseg,当时的版本也比较旧(1.8.9),所以今天做了相关升级。我就分享一下相关的心得,多有不足,欢迎指正。
环境说明:
阅读全文
posted @
2016-05-20 18:38 alexcai 阅读(211) |
评论 (0) |
编辑 收藏
摘要: 本文不涉及太多配置项管理,只是针对小白用户的最快安装手册
阅读全文
posted @
2016-05-13 10:55 alexcai 阅读(1602) |
评论 (2) |
编辑 收藏
摘要: 在当前的互联网类产品中,如何高效可用的生成的一个全局自增ID,是一个比较有挑战性的工作。我见过的一般的做法其实就是时间戳再加固定长度的随机 字符串。这个方案其实有两个问题,一个是生成的自增ID的可读性,另外就是随机,并不是真正的唯一,它是一个碰撞概率的。其它方案,如依赖数据的自增 ID,如果多个库,可以通过不同的步长来实现可读的序列。不过,这其实性能上肯定不可能很高。另外,会有单点的问题。所以,果断放弃。在查看了目前比较成 熟的snowfake方案之后,感觉不错。下图是它的算法核心
阅读全文
posted @
2016-04-26 09:22 alexcai 阅读(2121) |
评论 (0) |
编辑 收藏
摘要: 最近在调研文件的分布式存储及高可用,在GITHUB上面,发现了这个SeaweedFS项目不错。
阅读全文
posted @
2016-04-15 18:55 alexcai 阅读(2949) |
评论 (4) |
编辑 收藏
摘要: 今天在一个技术群里面,有同学提到了HyperLogLog(数据结构),排序方面技术。所以今天看一下相关的资料,算作一个总结。
阅读全文
posted @
2016-03-23 17:47 alexcai 阅读(1082) |
评论 (0) |
编辑 收藏
摘要: docx4j是一款在java世界处理微软word/ppt/excel文档的强大工具。它其实是一个半开源的产品。虽然它对WORD各种处理在API层 面进行了封装,但是像WORD本身的拆分,合并。其作者(Jason Harrop)是单独提出来了,封装成了商用的JAR包来提供支持。而我在深入学习其API之后,先后将组合,拆分技术进行了实现。
阅读全文
posted @
2016-03-14 16:10 alexcai 阅读(5538) |
评论 (2) |
编辑 收藏
摘要: spring mvc中,变量有一个作用域的概念,你可以很方便使用注解,就能实现变量的的设置,在各自的作用域内优雅的使用该变量。
阅读全文
posted @
2016-03-10 20:02 alexcai 阅读(2959) |
评论 (1) |
编辑 收藏
摘要: jenkins,作为开源世界的持续集成工具(CI),表现其实不错了。虽然不能与Atlassian的bamboo相比,别人是商业版本。
我使用的是它的WAR包版本,可以从jenkins 官网下载。个人建议在tomcat7.0.32版本以上运行。
阅读全文
posted @
2016-03-08 18:20 alexcai 阅读(2398) |
评论 (0) |
编辑 收藏
摘要: quartz,java世界里面的任务管理容器。
至于为什么会有misfire这个概念,我想可以重这三个方面来进行说明:
1 所有的线程都在忙于更高优先级的任务
2 任务本身CRASH了
3 代码的BUG,导置错误的设置了JOB
阅读全文
posted @
2016-03-03 15:58 alexcai 阅读(4946) |
评论 (0) |
编辑 收藏
摘要: 为什么需要一致性hash算法?
在缓存应用层面,如何保证数据访问的平横性,单调性?
平横性:主要是数据的平均分布,及当集群中某一个缓存服务失效,数据也能够正常分布
单调性:当数据插入某个缓存之后,再次调用,同样会落到对应的缓存上面。
阅读全文
posted @
2016-03-02 18:36 alexcai 阅读(3009) |
评论 (1) |
编辑 收藏
摘要: spring mvc作为展示层的组件,从参数预处理,验证,拦截,渲染。无不考虑的细致入微,你所要的做的,只是接口实现,切面接入,简单配置。
今天我们以分页功能展开来说明,如何把我们复杂的参数处理从控制器进行剥离!
阅读全文
posted @
2016-02-24 10:49 alexcai 阅读(2919) |
评论 (1) |
编辑 收藏
摘要: 最近一直在看倪超的那本《从paxos到Zookeeper分布式一致性原理与实践》,整本书干货满满。个人感觉在章节顺序编排上有些小问题,不过,不影响它作为介绍这款中间件产品特性及原理而全面阐述的开山之作。总之,内容很多,我也只是了解了皮毛。接下来写的种种,算是我喝了这碗鸡汤,消化来剩下的。
阅读全文
posted @
2016-02-01 17:57 alexcai 阅读(4889) |
评论 (0) |
编辑 收藏
摘要: mybatis目前一直作为我主要使用的ORM框架,当然,它的简单,SQL可控,高效才是我选择它的最终原因。前段时间学习了他的实体,ORM的XML文件自动生成,感觉也是比较简单。
阅读全文
posted @
2016-01-30 13:45 alexcai 阅读(3321) |
评论 (0) |
编辑 收藏
摘要: VisualVm与eclipse集成
阅读全文
posted @
2016-01-20 10:48 alexcai 阅读(3683) |
评论 (0) |
编辑 收藏
Thymeleaf 是一个纯JAVA实现的,能处理XML/XHTML/HTML5 等模板文件解析的工具。他能处理一切基于XML文档格式的文件。特别是在WEB展现层面,可以很流畅的进行页面数据的渲染与显示。通过其DOM解析技术,把模板样式读入内存(当启用缓存模式),当页面需要展现时,读取内存中的样式,通过与后端数据的封装填充,最终显示给用户。这样在大量用户访问的时候,可以降低页面渲染产生的IO,提高用户体验。另外,对于开发者,他的学习成本也不高。内置是基于ONGL语法来支持页面的语法,比如在SPRING下面,我们是这样写的:<form:inputText name="userName" value="${user.name}" />
在Thymeleaf下面,就是这样的:
<input type="text" name="userName" value="James Carrot" th:value="${user.name}" />
学习成本基本为零。他的牛B在于与HTML的静态页面一起存在时,毫无讳和感。这种叫作自然语言模板。很多所谓的模板语言,都是去定义一大堆小白用户根本看不懂的标签,语法,让人望而生畏。而他只是HTML原生语义添加了属性,就算用户直接访问,没有后台服务的启动,也是完全不影响期页面效果显示的。
今天就到这里,明天来干货。他是如何处理文本的?
posted @
2015-12-30 12:35 alexcai 阅读(3558) |
评论 (4) |
编辑 收藏
摘要: beanshell是一个轻量级的脚本语言,具有动态性,完全支持JAVA语法。原理就是通过JAVA的反射获得JAVA语句和表达式的实时执行能力。
阅读全文
posted @
2015-12-18 10:15 alexcai 阅读(3740) |
评论 (1) |
编辑 收藏
摘要: resin3到resin4变化确实挺大的。个人比较钟情于tomcat,不知道公司那帮人为毛选择resin,并且还不是收费版本的,这是要闹哪样!!!唉。今天,处理了一个项目上的性能问题,需要通过jmeter压测一下,看看到底有没有提升。当我部署到实体机上是,服务老是启不来。
阅读全文
posted @
2015-12-11 14:10 alexcai 阅读(2349) |
评论 (0) |
编辑 收藏
摘要: 高CPU占用排查
阅读全文
posted @
2015-12-10 17:58 alexcai 阅读(2856) |
评论 (2) |
编辑 收藏
摘要: 对于后端的参数校验,我们一直在强调的验证规则,提示信息的重用。这不,springmvc通过集成Valid最大程序减少了我们的工作量。其实后端的参数过滤,是分几种请求来源的。每种的处理都不太一样,但是我们如果能重用验证规则,提示信息,那就很强大了。
阅读全文
posted @
2015-11-27 17:12 alexcai 阅读(5568) |
评论 (3) |
编辑 收藏
摘要: 在最新版的ubuntu安装Phabricator
阅读全文
posted @
2015-11-19 14:44 alexcai 阅读(2759) |
评论 (2) |
编辑 收藏