论坛首页 综合技术论坛

Linux平台的JVM性能评测

浏览 27450 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-05-23  
最近准备用jroller来架设网站的Blog系统,因此我这几天研究了一下三个最主流的JVM,分别是Sun的Hotspot JVM,IBM的JVM和BEA的JRockit,并且做了一些性能方面的测试,所以向大家介绍一下。

在Linux平台上,Sun的Hotspot性能很一般,不如同样环境下Windows下的Hotspot表现好;

IBM的JVM无论在Linux还是Windows平台性能很卓越,不过IBM主要还是把精力放在Linux/Unix平台上,它的Windows平台的JVM到1.3.1性能口碑很好,但是以后就没有再单独发布新版本,因此从IBM网站也只能下载到Windows下1.3.1版本JVM,至于Linux平台下的1.4.1版本的JVM性能表现尚待检验;

而BEA的JRockit针对Intel 的CPU进行了指令优化,作为服务器的JVM来说在业界似乎一向评价颇好,但是我还不清楚JRockit在Linux上表现如何。这次我是要在SuSE Linux上跑jroller,因此主要关注3个JVM在我的SuSE 9上面的性能表现。

因为要作为网站服务器来使用,因此我还比较关注JRockit和IBM JVM的License问题,分别查了一下BEA和IBM的协议,看到这两个JVM都是可以免费使用,不管是开发目的,还是产品目的,如果是购买了其公司其他产品,那么可以得到免费的JVM方面的support,如果只是从网站下载使用其JVM,那么就没有免费的support,但是有商业付费的support。

在TSS上面有一个关于JRockit的Thread:

http://www.theserverside.com/news/thread.tss?thread_id=22895

Cameron Purdy对于3个JVM的评价如下:

引用
Every application is different, so there is no single "best JVM." These JVMs only compete on the x86 platform anyway, and they perform differently on Windows and Linux. The IBM JVM has been much faster at math (all number processing it seems) compared to the Sun JVM. The jRockit JVM has been much better at handling large numbers of threads and sockets. The Sun JVM has been the fastest at general business logic running in server mode, but there used to be stability issues with the hotspot server mode that prevented its use for many server applications.

To be honest, with the above exception noted, we've seen the most stability and least weird behavior with the Sun JVMs. I haven't had a chance to look at the latest BEA release, though, and it's probably the one that's been improving the fastest.


他认为:
IBM JVM处理数学运算速度最快,BEA JVM处理大量线程和网络socket性能最好,而Sun JVM处理通常的商业逻辑性能最好。不过Hotspot的Server mode被报告有稳定性的问题。而他尚未有机会尝试一下最新的JRockit。

架设Blog系统我最关心的其实还是JVM的多线程处理能力和网络socket处理能力,因此使用著名的VolanoMark Benchmark进行了这方面的测试

VolanoMark Benchmark是一个JVM性能测试程序,任何人都可以自己下载来测试:

http://www.volano.com/benchmarks.html

这是2003年5月的测试报告

http://www.volano.com/report/

我下载了VolanoMark Benchmark,在Server上面分别安装了Linux版本的JRockit1.4.2,Sun JDK1.4.2,和IBM JDK1.4.1。修改了一下VolanoMark的测试脚本(有些小问题)。VolanoMark测试主要是运行Volano自己开发的一个chat的web application,然后从客户端进行压力测试,统计web application单位时间内处理并发请求的能力。测试主要有两项:

1、Loopback测试

不进行网络传输测试,因此可以测试出来JVM的performance

2、 Network测试

通过网络进行测试,模拟真实环境的JVM处理能力。

服务器软硬件环境:

服务器CPU:超线程1.8Gz Xeon CPU × 2
操作系统:SuSE Linux9.0 Professional
Linux Kernel版本:2.4.21-202-smp4G
Glibc版本:glibc-2.3.2-88

Volano使用的是Tomcat4.0.3来做App Server。这也符合我的选择,我正准备使用Tomcat来做App Server。每个测试分别执行三次,测试结果如下:

1、性能测试(Loopback)



Performance

VolanoMark version = 2.5.0.9
Messages sent      = 20000
Messages received  = 380000
Total messages     = 400000

Sun JDK1.4.2

Average throughput = 8848 messages per second
Average throughput = 8060 messages per second
Average throughput = 8046 messages per second


IBM JDK1.4.1

Average throughput = 15620 messages per second
Average throughput = 17665 messages per second
Average throughput = 15666 messages per second


BEA JRockit1.4.2

Average throughput = 16549 messages per second
Average throughput = 15564 messages per second
Average throughput = 15736 messages per second




2、网络服务处理能力测试

VolanoMark version = 2.5.0.9
Messages sent      = 10000
Messages received  = 190000
Total messages     = 200000




BEA JRockit1.4.2

Average throughput = 3938 messages per second
Average throughput = 3290 messages per second
Average throughput = 3648 messages per second
Average throughput = 3328 messages per second


Sun JDK1.4.2

Average throughput = 2225 messages per second
Average throughput = 2163 messages per second
Average throughput = 2080 messages per second


IBM JDK无法执行测试


测试总结:

在第一项性能测试中,3个JVM都完成测试,但是正如上面Purdy提到的一样,Sun的Hotspot JVM在server mode情况下会出错,必须使用cliet mode。在性能测试结果来看,IBM的JVM和BEA的JVM旗鼓相当,分值都相当高,而Sun的JVM性能差了几乎一倍。

在第二项网络服务测试中,IBM的JVM无法完成测试,会出现段地址错误,JDK版本和glibc版本不兼容造成的。Sun的JVM也需要修改一下JVM参数才可以顺利执行,从测试结果来看,BEA的JRockit仍然遥遥领先于Sun的Hotspot。

经过本次测试,已经决出了优胜者,就是BEA的JRockit1.4.2。当然JRockit也有一些不足,例如在内存消耗和CPU负载方面要明显高于另外两个JVM。

JRockit除了性能上的优势,也有着丰富的性能调整选项和一个图形监控工具,和一个性能报告分析工具,这对于JVM的调优有着非常大的帮助,鉴于性能方面的优势,以及可管理性方面的丰富功能,我决定选择JRockit作为Tomcat的JVM来使用。

BEA网站也有丰富的JRockit方面的资料查阅:

http://edocs.bea.com/wljrockit/docs142/index.html


下面是JRockit的management Console,可以远程链接到服务器的JVM上进行性能监控。
   发表时间:2004-05-23  
我们也做过类似的测试,Weblogic Server 8.1 cluster on RedHat Linux,用真实的业务系统进行压力测试,BEA JRockit 比 Sun Hotspot的处理能力要高出一倍以上(不到两倍)。

说起来在一年多前刚刚知道blog的时候,因为对java的偏爱遍寻基于java的blog系统,结果找到了roller。为了解决它的中文问题逼着学习了Structs和Velocity,最后还是要自己写一个servlet filter来解决中文输入问题,我还到他的网站上去抱怨了。虽然拖了将近一年才真正开始自己的blog,不过对roller的学习还是让我受益不浅,可惜的是那时没有去关心它的O/R Mapping这一部分。
0 请登录后投票
   发表时间:2004-05-24  
出于性能上的考虑,我们一直用的是 IBM 的 JVM。Web Container 我们使用 Jetty 4.2.x,JRockit 启动 Jetty 的速度比 IBM JVM 慢多了。而且 JRockit 好象专门为很少的几种 Linux 版本作过优化(RHAD2.1、RHEL3?、SuSe???),在其它版本上跑不知道能否达到最佳的性能。
这几个 JVM(JRE/JDK)的 License 我以前都看过,好象是除了 Sun 的 JRE(非 JDK)可以和自己的产品打包销售外其余的所有的 JRE/JDK 用于商业用途全部是要收费的(当然可以让用户自己下载安装以绕过这个限制,但是只要是由开发商提供就是要收费的),回头再看看。
0 请登录后投票
   发表时间:2004-05-24  
既然是做网络服务,那么启动速度快几秒和慢几秒有什么关系呢?WebLogic的启动速度比Jetty慢多了,但是不能因此认为WebLogic不如Jetty。

IBM的JDK我很早以前从IBM网站下载了JDK1.4.1版本,都快过去1年多了,IBM网站还是1.4.1版本,不过已经发布到1.4.1SR2,但是我现在下载不下来,不知道为什么。而我现在手里的1.4.1显然和SuSE 9的Glibc不兼容,不知道SR2有没有修改过来。

总体评价下来,我感觉IBM现在在JVM上投入热情不高,JDK1.4.1都发布了一年多了,还不升级到1.4.2。而Windows下的JDK干脆就是1.3.1,就不升级了。相比BEA的JRockit活跃的升级和开发,我已经完全倒向了JRockit了。

JRockit是针对Intel CPU进行了指令优化,因此JRockit只能用在Intel CPU上,可以跑在Windows和Linux上面,而其他软硬件平台就不支持了。在JRockit的兼容性列表中并没有SuSE9,只有SLSE8,不过我现在跑下来,感觉很好用,没有发现任何兼容性问题。其实只要JDK版本发布的比你的Linux的Glibc版本新,一般就不会出现任何问题。例如IBMJDK1.4.1和JRockit1.4.1发布都比SuSE9老,我分别发现了一些小毛病,JRockit1.4.1的Console在Linux上启动有问题,但是JRockit1.4.2就完全正常了。

我这次测试IBM JDK由于glibc的兼容性问题无法把测试跑完令我觉得很遗憾,没有比较出来IBM和BEA的JVM性能高下。但是从开发的活跃程度和丰富的管理功能来看,BEA全面胜出。
0 请登录后投票
   发表时间:2004-05-24  
引用
JRockit is free to anyone deploying any Java code, whether that's WebLogic Server or not. Technical support is free to WebLogic Server users and can be purchased by anyone deploying anything else on it.

Eric
BEA Systems


上面明确的说出来,对于任何部署Java的人来说,JRockit都是免费的。
0 请登录后投票
   发表时间:2004-05-24  
另外听BEA的人说,JRockit在Thread方面进行了特别的优化,在SMP上面性能尤其的好。现在的Server是两颗超线程Xeon,模拟出来4颗CPU,JRockit能够表现这么好,可能也和这台Server是SMP有关系。这也反过来可以引出来一个测试,在单CPU上,JRockit的性能可以胜出Hotspot多少,而SMP可以胜出来多少,如果SMP上,JRockit更有优势的话,那么说明在SMP的Server条件下,我们更有理由采用JRockit。
0 请登录后投票
   发表时间:2004-05-24  
引用
JRockit is free to anyone deploying any Java code, whether that's WebLogic Server or not. Technical support is free to WebLogic Server users and can be purchased by anyone deploying anything else on it.

Eric
BEA Systems

这个 deploy 和我说的 distribute 不是一回事。如果开发商把 JRockit 提供给客户就构成了 distribute,这两个概念是不同的。客户自己下载用来 deploy Java 程序是没有问题的。

不过在国内基本上没有人考虑过这个问题。这样做其实已经比 Quake Wang 以前说的那些把开源软件改头换面自称具有自主知识产权的鸟公司强的多了。
0 请登录后投票
   发表时间:2004-06-09  
感谢 robbin 分享测试结果。

不知道有谁测过 jetty-4.2.20, jakarta-tomcat-4.1.30, Tomcat 5.0.25,  resin 3.08 的jsp性能?
0 请登录后投票
   发表时间:2004-06-09  
Jetty和Tomcat用的都是Jasper,性能应该差不了太多,但是Jetty比较轻巧,应该速度快一些。Resin号称最快的Java App Server,应该比Jetty,Tomcat都要快。
0 请登录后投票
   发表时间:2004-10-21  
时隔快半年了,服务器还是这台,但是Linux Kernel已经从2.4升级到2.6。因此我又重新测试和比较了一下BEA JRockit1.4.2和Sun Hostspot1.4.2在Kernel2.6下的表现如何。听闻Kernel2.6使用了NPTL,对于多线程Java应用性能有巨大的提高,是否如此呢?我们来看看测试结果:

1、性能测试(Loopback)

Performance

VolanoMark version = 2.5.0.9
Messages sent = 20000
Messages received = 380000
Total messages = 400000



Sun Hospot 1.4.2

Average throughput = 13701 messages per second
Average throughput = 14430 messages per second
Average throughput = 14466 messages per second


BEA JRocket 1.4.2

Average throughput = 19775 messages per second
Average throughput = 19310 messages per second
Average throughput = 18212 messages per second


和上文在Kernel2.4下面的测试成绩相比,性能的提高是惊人的,Sun Hotspot性能提高将近一倍!BEA JRocket性能提高也相当可观。


2、网络服务处理能力测试

VolanoMark version = 2.5.0.9
Messages sent = 10000
Messages received = 190000
Total messages = 200000



Sun Hospot 1.4.2

Average throughput = 9784 messages per second
Average throughput = 9972 messages per second
Average throughput = 10886 messages per second


此项测试中,BEA JRockit与Kernel2.6有些不兼容,导致测试无法正常完成。

从Sun Hotspot的网络服务测试比较可以看出,在Kernel2.6下面,Sun Hotspot的网络性能提高竟然有5倍之多,非常惊人!

总结:

Kernel2.6确实名不虚传,无论在性能测试,还是网络服务测试中,Sun Hotspot的性能提高都是非常惊人的!BEA JRockit提高也很显著。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics