Jboss(準確地講應(yīng)該是Jboss AS)是一款基于 J2ee 的免費開放源碼應(yīng)用服務(wù)器,由 Jboss 社區(qū)維護(注意區(qū)別于 Jboss 的另一款商用應(yīng)用服務(wù) JBoss EAP,由 Radhat 提供商業(yè)支持)。
它是一個管理 EJB 的容器,嚴格講 Jboss 核心服務(wù)僅支持 EJB 服務(wù)器,是不包括 JSP 和 Servelt 的 web 容器,所以 Jboss 之前一直綁定 Tomcat 作為 Web 容器,但 Web 容器畢竟是應(yīng)用服務(wù)器中最重要的模塊之一,更為了滿足 Jboss應(yīng)用服務(wù)的集成需要,所以到 Jboss 8.0(改名叫 wildfly)的版本后,Jboss 終于有了屬于其開源組織旗下的一款自己的 Web 容器“Undertow”。
現(xiàn)在問題來了:同樣是免費開源,做為深受廣大人民群眾喜愛的 Web 應(yīng)用服務(wù)龍頭“Tomcat”,和基于 Undertow 的 Jboss/wildfly,在做為 Servelt 容器應(yīng)用方面孰優(yōu)孰劣?
秉著不做吃瓜群眾,絕知此事要躬行的原則,作者以 tomcat v8.0.26和 Jboss v9.0.0(wildfly v9.0.0)為例,親測了一把。
1、測試方法簡述
1)系統(tǒng)分析及需求收集
現(xiàn)今大多數(shù)互聯(lián)網(wǎng)應(yīng)用系統(tǒng)的數(shù)據(jù)流轉(zhuǎn)為:
首先各種終端(PC/手機/Pad)發(fā)起請求(http 或者 scoket 協(xié)議);
其次經(jīng)過各種“軟硬件大拿”們的路由調(diào)度優(yōu)化,到達系統(tǒng)定義的接入層應(yīng)用系統(tǒng)服務(wù)器(Tomcat/Jboss 應(yīng)用處);
最后到后臺的核心業(yè)務(wù)應(yīng)用服務(wù)器(Tomcat/Jboss 應(yīng)用處)。
應(yīng)用系統(tǒng)之間的消息流轉(zhuǎn)用的一般是基于一些開源 RPC 框架(Dubbo,Protobuf)的遠程調(diào)用。
因此有以下兩個特點:
Tomcat/Jboss 不作用靜態(tài)頁面(.htm,.jsp)的服務(wù)器,該功能由 nginx 承擔(dān)
Tomcat/Jboss 獨立部署,不進行 tomcat/jboss 服務(wù)器間的(支持實時服務(wù)器間 session,context 復(fù)制)集群
綜上:Tomcat/Jboss 的性能優(yōu)化比對測試,僅驗證其作為 Servelt 容器的能力即可。
2)測試軟硬件環(huán)境
物理環(huán)境
使的4*cpu+16G內(nèi)存的虛擬機
軟件環(huán)境
操作系統(tǒng):linux(Oracle Linux Server release 6.5)
軟件版本:tomcat8.0.26,Jboss9.0.0
3)性能參數(shù)
JVM內(nèi)存:8G(-Xms512m –Xmx8192m)
maxThreads:測試512/1024/2048三檔
enableLookups:固定為false
acceptCount:固定為512/1024
connectionTimeout:固定為30000
工作模式:NIO/APR
ax_tw_buckets = 60000
4)Servelt測試樁及部署
測試樁不進行復(fù)雜的業(yè)務(wù)處理,僅進行簡單的參數(shù)解析及回顯:
性能測試工具的調(diào)用方調(diào)度式:
http://192.168.xxx.xxx:3030 /loginServelt?username=1&password=1
2、測試內(nèi)容
相同壓力下,Tomcat/Jboss 的處理效率(TPS,響應(yīng)時間)。
以100/200/300/500/1000/2000用戶分檔進行并發(fā)壓測,觀察 tomca t和 Jboss 在各檔配置時的處理效率,記錄 TPS、響應(yīng)時間、內(nèi)存占用、CPU。
3、測試數(shù)據(jù)及分析
1)測試數(shù)據(jù)
說明:
tomcat 采用的是最優(yōu)的 apr 模式,Jboss 9.0.0內(nèi)置的是 undertow,只有 NIO 模式一種;
失敗的原因,從錯誤信息看,全部是連接服務(wù)器失敗,說明在高負荷情況下,服務(wù)器來不及接收新的連接請求造成的;
上述測試采用的是用測試工具進行的壓測,同時采用 AB 工具進行過測試(測試結(jié)果和上述工具的測試結(jié)果一樣),具體數(shù)據(jù)參見附錄1:AB測試記錄;
本部分比對測試過程中,網(wǎng)絡(luò)出現(xiàn)較明顯延時開銷,致總體 TPS 不高,但這也會比較符合實際生產(chǎn)的環(huán)境。
2)比對結(jié)論
相同配置及被測業(yè)務(wù)模式下,Jboss 處理效率低于 tomcat 約30%左右;
(注意:實際是 Jboss 約比 Tomcat 多花了10ms 左右,案例中在測試業(yè)務(wù)耗時很短的情況下看起來差異很大,而實際業(yè)務(wù)耗時比較大的情況下,比如業(yè)務(wù)需要1s,那么 Jboss 只低約10ms/1000ms=1%左右)
相同的業(yè)務(wù)處理壓下(TPS)下,tomcat 占用的CPU略低于 Jboss;
Tomcat 上用的內(nèi)存小于 Jboss(這點可忽略不計,兩者都占用不大,內(nèi)存又便宜);
在高并發(fā)下,Jboss 有更高的失敗率。
結(jié)論:Tomcat 在處理效率、CPU 占用、內(nèi)存占用上、業(yè)務(wù)成功率均優(yōu)于 Jboss。
結(jié)束語
以上 Tomcat/Jboss 的性能比對測試結(jié)果:“Tomcat 在處理效率、CPU 占用、內(nèi)存占用上、業(yè)務(wù)成功率均優(yōu)于 Jboss;” 僅驗證其作為 Servelt 容器的能力,所測試為一定條件下單點單機的測試數(shù)據(jù),不涉及 Tomcat/Jboss 的集群性能測試(集群都交給 RPC 框架本身自己定義處理)。
此外文中測試結(jié)論的得出均基于特定測試環(huán)境下所得的客觀測試數(shù)據(jù),僅做參考,不做為通用型技術(shù)選型的一般性依據(jù)。
附錄:
本文作者:黃方敏(點融黑幫),畢業(yè)于湘潭大學(xué),現(xiàn)就職于點融網(wǎng)工程部Infra團隊任性能測試開發(fā)工程師。曾任職于思科網(wǎng)訊,文思海輝,多年軟件測試領(lǐng)域經(jīng)驗。