Atomikos 性能提高8倍

来源:互联网 发布:ubuntu14.04安装mysql 编辑:程序博客网 时间:2024/04/26 11:51
 
From: http://blog.sina.com.cn/s/blog_53765cf9010176zx.html
 
使用spring的代理datasource来让spring管理事务,性能问题解决,提高8倍
<bean id="dataSourceProxy"class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
       <constructor-argref="dataSource"></constructor-arg>
</bean>


1.   Atomikos从池里取得connection时,每次都会去进行select test,这个对获取连接的影响很大,取消这个测试,TPS大概能提高近1倍;

2.   Atomilos对池中connection的管理效率随着连接数的上升,呈现指数级的下降,测试环境中,连接最大配置为300,但实际上最大值没有超过70,线程dump发现连接池管理对象上存在激烈的锁竞争,导致很多线程等待前面的线程释放锁对象;

3.   由于Atomikos支持JTA事务,而c3p0则不支持,这导致atomikos在获取connection时,首先需要从线程上下文去检索是否已经存在着connection,这个检测从atomikos的实现上看,会遍历连接池中所有connection对象,所以当连接数上升时,连接池的效率显著下降;

当前采用的措施以及实施建议:

1.   生产环境中一般最大连接数控制在100,而我们测试中则是配上了300,与真实环境不一致,从而放大了两者的差距;

2.   对atomikos的连接池代码进行了部分优化,一是将空闲的连接总是放在池的最前面,加快获取连接的速度,二是对空闲连接数用计数器管理,而不用去遍历所有的连接状态得到这个值;

3.   在将两者都将最大值设为100后,对比测试,发现,atomikos与c3p0还有一倍的TPS差距,在网关的测试中一台tomcat可以达到144的TPS;目前在生产环境是4台OC4J,实际峰值TPS大概是15,应该说,目前atomikos的性能是完全能满足现在和将来一段时间的时间需求的;