歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Jetty和Tomcat的使用及性能測試

Jetty和Tomcat的使用及性能測試

日期:2017/2/27 15:55:39   编辑:Linux教程

一 測試目的

這次對Jetty和Tomcat進行性能測試,主要是為了給新版本WebPortal的開發選擇合適的Java Web Server。

我們之前對老的Rest和新的TMMI都進行過性能測試,Rest有Akamai的緩存,性能基本沒有問題。但是WebPortal的內容是不斷更 新的,不適合使用Akamai緩存,所以性能就全靠WebPortal本身以及均衡負載了。所以我想,在開發新版本WebPortal時,要盡量進行優 化,包括硬件、Web Server、數據庫訪問等。

Jetty和Tomcat是兩個主要的開源Java Web Server,兩者都比較成熟,Google App Engine使用Jetty,JBoss是使用Tomcat作為Web容器。究竟哪個更適合我們的需求,還是自己做測試比較靠譜。

這次測試中,Jetty的版本是6.1.19,Tomcat版本是6.0.35。被測試的應用是Akamai地圖應用(AkamaiLogParser),為了方便測試,對代碼進行了部分修改,後面會介紹。

二 Jetty和Tomcat的部署、配置

我們之前版本的Rest、WebPortal都是使用embedded的Jetty進行部署。Jetty和Tomcat都能支持stand-alone和embedded方式。下面就來介紹下Jetty和Tomcat stand-alone方式的部署和配置。

Jetty的部署、配置

1. 將Jetty的zip文件copy至服務器並解壓,解壓後可以看到如下文件(夾)

其中,bin中是一些啟動Jetty的腳本和jar文件;contextes中是各個context的配置信息,一個context相當於一個應 用,比如AkamaiLogParser可以對應一個context;etc中是jetty的配置信息;webapps是jetty默認的存放部署的應用 的目錄,不過在這次測試中,我建立了一個文件夾myapp,用於存放AkamaiLogParser。

2. 將AkamaiLogParser程序包copy至myapp目錄下。要注意的時,要把項目所有依賴的jar文件放在 {JETTY_HOME}/myqpp/AkamaiLog/webapps/WEB-INF/lib裡面,jetty會在這個目錄下加載需要的jar文 件。另外,web.xml和spring的配置文件也可以放在WEB-INF下。

3. 在{JETTY_HOME}/contexts下新建文件akamai.xml,文件內容為:

其中contextPath是指訪問AkamaiLogParser的URL,這裡設置為“/”,URL就是http://domianname:port/***.html了。jetty.home是指AkamaiLogParser程序包所在的相對於{ JETTY_HOME }的路徑。

4. Log4j.properties放在{ JETTY_HOME }/ resources下,jetty會從此目錄讀取log配置

5. AkamaiLogParser用到的額外配置文件conf.properties,可以直接放在{ JETTY_HOME }下,這是啟動Jetty時的當前路徑

6. 在{ JETTY_HOME }下,使用java –jar start.jar啟動jetty

7. 可以使用java –XmsXXXm –XmxXXXm來調整分配給jetty的內存大小

8. 可以在{ JETTY_HOME }/etc/jetty.xml中修改jetty的配置信息,比如jetty的端口、minThreads和maxThreads等。後面在測試中,對 jetty進行性能調優時,主要就是修改minThread和maxThreads這兩個參數。

Tomcat的配置、部署

1. Tomcat的部署方法比較簡單,這裡僅僅是為了測試,所以沒有理會log的配置等。部署方法為將AkamaiLogParser的webapps下的所 有內容copy之{TOMCAT_HOME}/webapps/ROOT目錄下,這裡同jetty一樣,需要將所有依賴的jar包放在WEB-INF /lib目錄下。

2. 使用{TOMCAT_HOME}/bin/startup.sh啟動tomcat

3. 調整為tomcat分配的內存大小的方法為,修改{TOMCAT_HOME}/bin/catalina.sh,在echo "Using CATALINA_BASE: $CATALINA_BASE"前添加如下代碼:JAVA_OPTS="-server -Xms512m -Xmx2048m"。

4. 調整連接池的方法為在{TOMCAT_HOME}/conf/server.xml的Connector節點中添加如下參數:connectionTimeout="…" maxThreads="…" acceptCount="…"。

三 測試環境

被測服務器:

CentOS 5.6 64位

CPU:兩個2.93GHz的CPU

內存:2G

JDK:1.6.0_29,Java HotSpot(TM) 64-Bit Server VM

Jetty:6.1.19

Tomcat:6.0.35

發送測試請求的Jmeter機器:

使用三台機器運行JMeter,采用JMeter遠程測試的方法(稍後介紹),其中兩台機器用作JMeter server,一台用作client。

被測服務器和Jmeter的三台機器都是同一台物理上劃分出來的虛擬機,所以網絡傳輸的速度應該很快,不會成為影響測試結果的因素。

測試時,還對AkamaiLogParser的代碼進行了修改,讓每次請求都直接返回內存中的一個字符串,這樣就屏蔽了磁盤文件的讀寫速度對測試結果的影響。

另外,為jetty和tomcat分配的內存大小都是“-Xms512m –Xmx2048m”。

至此,就確保了在相同的硬件條件下,jetty和tomcat的處理能力是唯一影響測試結果的因素。

四 Jmter遠程測試

Jmeter遠程測試中,用兩種角色:server和client。Server用來向被測服務器發送請求,client用來檢測測試結果。下面是本次測試中的物理環境圖:

使用Jmeter進行遠程測試的步驟為:

1. 啟動Jmeter server,啟動命令為:JMETER_HOME/bin/jmeter-server。由於需要同時發送數量很大的請求,需要更改為Jmeter分配 的java 堆的大小,修改方法為:在JMETER_HOME/bin/jmeter.sh中添加JVM_ARGS="-Xms512m -Xmx2048m"。

有時會碰到Server failed to start: java.rmi.RemoteException: Cannot start. XXX is a loopback address.的錯誤,這時需要修改/etc/hosts文件,將127.0.0.1指向localhost.localdomain,將機器的實際IP指向真實的機器名。

2. 將Jmeter server的地址添加到Jmeter client的屬性文件中。編輯JMeter控制機的屬性文件。在/bin/jmeter.properties文件中找到屬 性"remote_hosts",使用JMeter遠程服務器的IP地址作為其屬性值。可以添加多個服務器的IP地址,以逗號作為分隔。

3. 通過Jmeter client啟動遠程測試,添加線程組:

clip_image007

其中“Number of Threads(users)”是同時發送的請求數量。Ramp-UP Period是在多長時間內達到並發數。Loop Count就是發送多少輪請求。

4. 新建HTTP REQUEST:

clip_image009

5. 創建測試結果監聽器。

6. 通過Run->Remote Start All開啟測試。

五 測試結果分析

下面是測試中搜集到的數據

Tomcat測試結果

並發數

maxThreads

acceptCount

CPU

內存

Error%

吞吐量(次/秒)

4000

2000

2000

47.5%

7.5%

0.34%

987

6000

3000

3000

56.2%

7.5%

0.63%

1150

8000

4000

4000

63.2%

7.7%

0.15%

1120

10000

5000

5000

54.4%

7.4%

0.31%

1188

10000

10000

10000

66.2%

7.9%

0.53%

1148

Jetty測試結果

並發數

maxThreads

minThreads

CPU

內存

Error%

吞吐量(次/秒)

4000

5000

100

53.9%

29.5%

0.32%

1009.6

4000

8000

800

48.8%

19.8%

0.25%

1000.1

10000

5000

100

58.5%

29.4%

3.23%

1130

10000

10000

1000

65.1%

20.2%

0.99%

1106

上面兩組數據中,紅色部分為保證較低錯誤路的前提下獲得的最佳性能。比較上面兩組數據可知,tomcat的吞吐量是1188次/秒,Jetty是 1009.6次/秒,兩者相差並不太多,但是對於jetty,當並發數上升後,錯誤率也在上升,同時,Jetty也消耗更多的資源。總結而言,在本次測試 環境下,tomcat性能比jetty略優,tomcat穩定性較好,資源消耗也小於Jetty。建議新版本WebPortal的開發中,選擇 Tomcat作為web server。

由於本次測試的硬件環境跟MARS Production的硬件環境並不一致,測試結果對production環境中的性能表現並不一定具有參考價值。
原文:http://www.cnblogs.com/zhangxiaojun/archive/2013/02/07/2908619.html

Copyright © Linux教程網 All Rights Reserved