众所周知,当今许多应用软件都是用Java编写的,其优势是经过一次编写后,可运行在不同的操作系统平台上,有很大的灵活性。但不同的Java版本运行在不同的硬件平台上,会反映出不同的性能。如何判定不同硬件平台运行Java程序的效率,是Java使用者所普遍关心的问题。
1. SPECjbb2000 Java基准测试
SPECjbb2000 是SPEC委员会制定的一套Java基准测试程序,它是用于测试Java服务器性能的。SPECjbb2000模拟了三层客户/服务器模型结构,所有的三层结构都在一个JVM(Java虚拟机)内实现。
这三层结构模拟了一个典型的商业应用结构:第一层是用户(客户端输入);第二层是商业应用逻辑;第三层是数据库。在SPECjbb2000里,第一层是用进程或线程模拟客户系统的随机输入;由Java类和Java对象形成的Btree模拟第三层的数据库;在第二层里是对Btree数据库中的数据进行操作,其结构图如下:
SPECjbb2000 基准测试借用了TPC-C基准测试的概念、输入产生、和交易模式。只不过,SPECjbb2000用Java类取代数据库中的表(Table),用Java对象取代数据库中的记录(Record)。SPECjbb2000主要关心的是第二层业务逻辑的处理能力,即考察用Java编写的应用程序运行在某台服务器上所表现出的性能。
SPECjbb2000规则中要求只运行一个Java虚拟机(JVM)。在整个测试中,以下因素是影响测试性能的关键:
-
JVM(Java虚拟机)
-
JIT(即时编译)
-
Garbage Collection(垃圾收集)
-
Thread(线程)等技术
-
操作系统的内核处理
-
CPU的整型处理能力、Cache的大小,内存大小和结构。
-
服务器SMP的线性扩展能力。
SPECjbb2000测试中,并没有考察到网络、磁盘I/O、和图形处理能力。
2. SPECjbb2000 Java基准测试结果分析
下表收集了一些厂商的服务器运行SPECjbb2000基准测试的结果。
机器型号 | CPU | Memory | JVM版本 | 结果(ops/s) |
HP Superdome | 64-way (875MHz, PA-8700+) | 256GB | Hotspot 64-bit Server VM 1.4.0.01 | 614358 |
Sun Fire 15K | 104-way (1050 MHz, UltraSPARC III) | 576GB | HotSpot 64-Bit Server VM on Solaris/SPARC version 1.4.0_01 | 602270 |
Sun Fire 15K | 72-way(1050 MHz, UltraSPARC III) | 288GB | HotSpot 64-Bit Server VM on Solaris/SPARC version 1.4.0_01 | 433166 |
HP Superdome | 32-way (875MHz, PA-8700+) | 128GB | Hotspot 1.4.1.02 64-bit VM on HP-UX11i for PA-RISC 8700+ | 346862 |
pSeries 690 Turbo | 32-way (1300 MHz, POWER4) | 128GB | J2RE 1.3.1 IBM AIX 5L for PowerPC (64 bit JVM) | 339484 |
Sun Fire 6800 | 24-way (1200 MHz, UltraSPARC III) | 48GB | HotSpot Server VM on Solaris/SPARC, version 1.4.2 | 231121 |
上述结果截止于2003年5月31日。
SPECjbb2000测试值的好坏更多的依赖于Java虚拟机的性能,而且受系统带宽的影响较小。在硬件台不变的情况下,JVM版本的升级会带来性能几倍的提升。
从上表中可看到HP Superdome 32-way比IBM p690 32-way测试值高,虽然HP Superdome的CPU主频低于IBM p690的CPU主频,但是其使用的JVM的版本已经是1.4.1.02,而IBM p690上的JVM版本是1.3.1。从详细的测试结果中去看,HP Superdome 64-way的机器在启动到32个客户端时的值是335403 ops/s,低于其32-way(32个客户端)机器的测试值。原因就在于32-way机器测试时使用的是JVM 1.4.1.02,而64-way机器使用的是JVM 1.4.0.01。
Sun Fire 15K 104-way 的测试值高于IBM p690 32-way,除了JVM版本较高外,其测试时的CPU个数很多。另外,我们还要看到Sun Fire 15K在启动到55个客户端时的测试值是334986 ops/s,低于IBM p690 32-way(32个客户端)的值。
2. 小结
SPECjbb2000反映的是Java虚拟机的性能,但在实际中该值常被用来说明服务器的扩展性,尤其是我们的友商常用它来证明它们的服务器的性能是最优的、扩展能力是线性的。
SPECjbb2000基准测试完全是在内存中运行,不涉及I/O操作、网络操作等。如果用它来衡量服务器的整体能力和扩展性,这未免以点带面过于主观,TPC/C、Oracle ASB11i、SAP等这些基准测试更能贴近客户的实际情况,更能代表服务器的性能和扩展性。
文章来源于领测软件测试网 https://www.ltesting.net/