眾所周知,當今許多應用軟件都是用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等這些基準測試更能貼近客戶的實際情況,更能代表服務器的性能和擴展性。
原文轉自:http://www.anti-gravitydesign.com