Java远程调用性能测试

news/2024/10/21 19:44:27/

Java远程调用性能测试

http://zwbill.iteye.com/

- by zvane

现在,Java远程调用方法很多,各种方法的优缺点网络上也有很多的参考文章,这次我对几个典型的Java远程调用方法做了一个简单的性能分析比较,可供大家参考。

 

测试环境:CPU:奔腾双核 T4500,内存:DDR3-1067 2GWeb容器:Tomcat6.0.33,操作系统:WinXP-sp3

 

测试项目:

1.RMI:Spring3集成发布。

2.hessian:用Spring3集成发布到Tomcat容器。

3.Java6 WebService:使用Java6原生WebService和注解,直接用Endpoint.publish发布服务。

4.CXF:用Spring3集成发布到Tomcat容器。

 

测试结果:

 

测试案例单线程访问并发访问
请求数耗时(s)吞吐量
(每秒处理请求数)
总请求数
(每个线程1000)
并发线程数耗时(s)吞吐量
(每秒处理请求数)
RMI100005.91 1693 10000010031.77 3148
Hessian1000011.13 899 100000100//
Java6 WebService1000018.52 540 100000100134.52 743
CXF1000027.58 363 100000100194.74 514
 

说明:以上测试虽不是非常的精确,但基本能说明一定的问题。每项案例的服务端方法,都是简单方法,接收客户端传递的一个String类型参数,并打印到console。每轮测试取三次时间的平均值。所有单线程访问测试全部完成并正常处理请求,没有请求拒绝情况发生。而并发访问测试,除hessian中途抛异常无法完成,其余均正常完成测试。

 

结论:

1.RMI的性能最高,这已是公认,RMI底层基于Java远程方法协议(JRMP)和对象序列化技术,而JRMP是直接基于TCP/IP协议的封装,在网络上传输2 byte的有效数据,对于TCP而言,总共有478 byte被额外传输,而对于RMI, 1645byte被额外传输。可见RMI的效率还是相当不错的。JavaEE标准的EJB就是基于RMI的调用。

2. hessian是一个轻量级的remoting on http框架。Hessian没有采用WebService标准的SOAP协议,而是自己实现了一种二进制RPCRemote Procedure Call Protocol,远程过程调用协议)协议。Hessian的设计理念就是简单高效,使用 Hessian 传输数据量比Soap协议要小很多。这也是为什么Hessian的性能要高于WebService。但是,尽管它再简单高效,它始终是基于Http协议上封装的,所以还是比JavaRMI效率要差一些。我看过其他的一些研究测试报告称Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。这个结论在我的测试中还真没有发现,也许与测试环境或方法有关系吧。

 

3.Java6WebService CXF的性能应该说是基本同级别,前者略高于后者。众所周知WebService是基于Soap协议实现的,而Soap协议是在Http协议基础上的XML定义和封装。所有的请求和响应都要被转化成符合SOAP标准的XML格式。显然这直接会导致效率的降低。

XML格式的协议是一种易读易理解的协议,但并不高效。解析和组装XML协议数据流都需要耗费系统的处理时间,所以,WebService的性能不如Hessian这里要说一下的是Java6原生的WebService,开发起来非常方便,而且无需额外引入一大堆的Jar包。性能又强于CXF至于Axis2Axis1就更不用说,已经有很多测试表明CXF的性能是Axis22倍以上,是Axis12-6倍。

 

4.那么既然RMI性能那么好,为什么我们需要那么多其他的远程调用方式呢?这个问题又引发到了一个原始的真理。越原始越底层的技术效率就越高,但局限性也就越大。RMIJava的特性,那么它必须基于JVM运行,也就是说RMI无法跨语言运行。而WebService就不同了,Soap是基于标准Http协议的,是一种与语言无关的字符级协议,所以它可以更好的实现异构系统的通信。这在我们现实环境中是非常有用的,相信大家还是WebService用的比较多点吧。

 

不足:这次的测试,还是存在很多不足之处。

1.Hessian的并发测试时,跑到中途大约300-400次调用时就抛异常中断了,具体原因还没来得及仔细分析。不知道是否与Spring集成或测试方法有关系。

2.另外,这次的远程方法都是简单处理方法,而在复杂方法调用环境下测试情况如何还需更进一步研究。

3.下一步,如果有时间,可以发布到Linux环境测试一下各项性能。


http://www.ppmy.cn/news/414631.html

相关文章

浪潮之颠一_读书笔记

目录 1、AT&T2、IBM3、Apple4、IT定理5、Intel6、思科7、惠普8、摩托罗拉9、硅谷10、短暂而失去机会的公司 1、AT&T 1877年,贝尔,美国电报电话公司,通信和半导体技术 1925年,成立贝尔实验室(范围广泛) 发明电话、射电天文…

奔腾微型计算机采用的微处理器的型号,2012年计算机一级考试模拟试题及参考答案(1)...

2012年计算机一级考试模拟试题及参考答案(1) 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 [1] 数据111H 的最左边的1 相当于2 的( )次方。[参考答案A] [A] 8 [B] 9 [C] 11 [D] 2 [2] 下列各进制数中最大的数是( )。[参考答案D] [A] 22…

【读过的书】《从你的全世界路过》

作者:张嘉佳2020.2.7 整理完 我希望有个如你一般的人,如山间清爽的风,如古城温暖的光。从清晨到夜晚,由山野到书房。只要最后是你,就好。我希望有个如你一般的人,贯彻未来,数遍生命里的公路牌。…

21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?

21 | 面向流水线的指令设计(下):奔腾4是怎么失败的? 上一讲,我给你初步介绍了 CPU 的流水线技术。乍看起来,流水线技术是一个提升性能的灵丹妙药。它通过把一条指令的操作切分成更细的多个步骤&#xff0c…

AI生成--原型与原型链

原型(prototype) 在 JavaScript 中,每一个对象都有一个内部属性 [[prototype]],也可以称之为原型。原型是一个对象或 null。当我们访问一个对象的属性或方法时,如果对象本身没有这个属性或方法,那么 JavaS…

《这就是软件工程师》读书笔记

第一部分 行业地图 选择:一线和次一线城市机会巨大 1.北京 2.上海、深圳、杭州 3.成都、广州、南京、厦门 4.福州、苏州 软件工程师的四大台阶: 阶段 能力 1 新手阶段 执行力 2 进阶阶段 设计能力 3 高手阶段 融会贯通的能力 4 行业大…

【长安的荔枝】读书摘记

马伯庸 小结 前两天,读完了这本书,书不长,故事情节紧凑,一口气几个小时便读完了。读完此书,倒吸一口气,细细品来,感概什么事都是有缘由的,比如书末说到福建有个风俗:“…

浪潮之巅-读后感

《浪潮之巅》这本书,草草翻阅感觉就是科技企业的一部兴衰史,介绍了各个时代引领浪潮的伟大企业如何在时代的大潮里走上巅峰,又如何在浪潮退却时步入低谷甚至沦落到被收购的结局;细细品读却感触颇深,企业从发展到极度辉…