在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来使用。