加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Atomikos 性能提高8倍

(2012-08-10 19:15:49)
标签:

it

分类: java
使用spring的代理datasource来让spring管理事务,性能问题解决,提高8倍
<bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
        <constructor-arg ref="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后,对比测试,发现,atomikosc3p0还有一倍的TPS差距,在网关的测试中一台tomcat可以达到144TPS;目前在生产环境是4OC4J,实际峰值TPS大概是15,应该说,目前atomikos的性能是完全能满足现在和将来一段时间的时间需求的;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有