读书人

事务控制的有关问题

发布时间: 2012-09-05 15:19:34 作者: rapoo

事务控制的问题
今天在做性能优化的时候发现了一些问题 我现在把自己的问题出现过程描述下:
测试机器用的是本人自己的可能会有点出入:
windows7 旗舰版64位
jdk : 64 1.6.0_27
cpu Inter Core i3-2310M CPU @ 2.10GHZ
内存 6G
tomcat已经调到最优支持2000个并发(这个是在自己的机器上 服务器的话会更高)
请求连接为/infows/rs/users/userinfo/101000000841 该链接包含2次数据查询操作和将数据转化为XML的操作非常复杂,大家可以看下没有缓存的结果:
并发量/请求数成功/失败吞吐用户平均等待时间(ms)服务器平均处理时间(ms)
1/1w10000/091.6810.90810.908
100/1W10000/0154.31648.0476.480
300/1w10000/0159.921575.9476.253
350/1w10000/0162.952147.9336.137
400/1w10000/0162.122467.3016.168
500/1w10000/0166.732998.8725.998
1000/1w10000/0165.036059.6476.060
2000/1w10000/0147.9213520.7736.760
非常惨 直接掉到350左右的并发 也可以理解
现在加上缓存(直接将XML结果缓存起来),且现阶段是全命中缓存,实际情况没这么理想:
并发量/请求数成功/失败吞吐用户平均等待时间(ms)服务器平均处理时间(ms)
1/1w10000/0146.996.8036.803
100/1w10000/0311.98320.5283.205
300/1w10000/0258.621159.9863.867
350/1w10000/0259.851346.9473.848
400/1w10000/0254.741570.2503.926
500/1w10000/0258.721932.6113.865
600/1W10000/0255.502348.3543.914
700/1W10000/0252.122776.4993.966
1000/1W10000/0256.243902.6233.903
2000/1W10000/0260.447679.4393.840
蛋疼了才提高了200左右的并发,和自己想象中的出入比较大,why
是否从缓存中取出的网速限制,是否是连接数的限制?且缓存的内容是xml字符串不应该存在序列化上的问题 以上的问题都想过可结果都没有解决
我个人认为实际达到效果应该和TOMCAT的调优效果达到的并发量应该差不多 不该差那么多得 所以找原因 查了很多资料还是没解决 后来无意中试验了下在action层直接读取缓存结果让我非常惊讶,轻松支持
1700的并发量,都是同一个效果为什么到service层后差距会这么大,为了证明是service层的问题我简化了方法,写了和action层一样的方法结果发现和上面测试的结果一样非常让人失望,不过这倒让我非常兴奋找到了问题的入口,继续找和同事讨论了下,决定跟踪下方法的执行,发现进入方法前有大量的切面和反射相关的方法,思考````就是这些方法让整个测试结果改变了,想了下也就只有事务管理和上面的这个现象比较符合通过切面控制达到效果,所以觉得将类中的Tranction注解去掉测试,果然到家看下下面的结果:
并发量/请求数成功/失败吞吐用户平均等待时间(ms)服务器平均处理时间(ms)
1/1w10000/0394.302.5362.536
100/1w10000/02173.3246.0130.460
300/1w10000/01587.71188.9510.630
350/1w10000/01721.37203.3270.581
400/1w10000/01513.23264.3350.661
500/1w10000/01551.02322.3680.645
600/1w10000/01433.20418.6440.698
700/1w10000/01260.96555.1320.793
1000/1w10000/01101.14908.1520.908
1500/1w10000/0883.191698.3971.132
1600/1w10000/0848.201886.3481.179
1700/1w10000/0770.252207.0661.298
2000/1w10000/0704.682838.1621.419

结果让人为之兴奋,这次测试出来的结果和自己所想的结果差不多,果然是事务控制的关系,但是这边就出现一个问题了,在事务配置中我们是将事务默认配置成readonly的 理论上说事务的消耗应该不会那么多,但是事实胜于雄辩,所以我建议将所有service中的注释注解全部注解到方法上不要注解到类上,且不需要事务控制的就干脆也不要才方法上注解了,只在需要事务控制的方法打上注解标记.
当然以上都是本人的一些观点可能原因什么的有差别 希望大家指出

读书人网 >编程

热点推荐