Tomcat優化(二)

<script id="tags_script" type="text/javascript"></script>

 

Tomcat 本身不能直接在計算機上運行,需要依賴於硬件基礎之上的操作系統和一個java虛擬機。您可以選擇自己的需要選擇不同的操作系統和對應的JDK的版本(只要是符合Sun發佈的Java規範的),但我們推薦您使用Sun公司發佈的JDK。確保您所使用的版本是最新的,因爲Sun公司和其它一些公司一直在爲提高性能而對java虛擬機做一些升級改進。一些報告顯示JDK1.4在性能上比JDK1.3提高了將近10%到20%。


可以給Java虛擬機設置使用的內存,但是如果你的選擇不對的話,虛擬機不會補償。可通過命令行的方式改變虛擬機使用內存的大小。如下表所示有兩個參數用來設置虛擬機使用內存的大小。

參數

描述


-Xms

JVM初始化堆的大小


-Xmx

JVM堆的最大值


這兩個值的大小一般根據需要進行設置。初始化堆的大小執行了虛擬機在啓動時向系統申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地佔用更多的內存,此時這個參數就是顯得非常重要,如果虛擬機啓動時設置使用的內存比較小而在這種情況下有許多對象進行初始化,虛擬機就必須重複地增加內存來滿足使用。由於這種原因,我們一般把-Xms和-Xmx設爲一樣大,而堆的最大值受限於系統使用的物理內存。一般使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。因此一般建議堆的最大值設置爲可用內存的最大值的80%。


Tomcat默認可以使用的內存爲128MB,在較大型的應用項目中,這點內存是不夠的,需要調大。


Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置:


JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'


需要把這個兩個參數值調大。例如:


JAVA_OPTS='-Xms256m -Xmx512m'


表示初始化內存爲256MB,可以使用的最大內存爲512MB。


另外需要考慮的是Java提供的垃圾回收機制。虛擬機的堆大小決定了虛擬機花費在收集垃圾上的時間和頻度。收集垃圾可以接受的速度與應用有關,應該通過分析實際的垃圾收集的時間和頻率來調整。如果堆的大小很大,那麼完全垃圾收集就會很慢,但是頻度會降低。如果你把堆的大小和內存的需要一致,完全收集就很快,但是會更加頻繁。調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求。在基準測試的時候,爲保證最好的性能,要把堆的大小設大,保證垃圾收集不在整個基準測試的過程中出現。


如果系統花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過 3-5 秒。如果垃圾收集成爲瓶頸,那麼需要指定代的大小,檢查垃圾收集的詳細輸出,研究垃圾收集參數對性能的影響。一般說來,你應該使用物理內存的 80% 作爲堆大小。當增加處理器時,記得增加內存,因爲分配可以並行進行,而垃圾收集不是並行的。


Tomcat 5常用優化和配置


1、JDK內存優化:

Tomcat默認可以使用的內存爲128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下設置:

JAVA_OPTS='-Xms[初始化內存大小] -Xmx[可以使用的最大內存]

一般說來,你應該使用物理內存的 80% 作爲堆大小。


2、連接器優化:

在tomcat配置文件server.xml中的配置中,和連接數相關的參數有:

maxThreads:

Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。默認值200。

acceptCount:

指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。默認值10。

minSpareThreads:

Tomcat初始化時創建的線程數。默認值4。

maxSpareThreads:

一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認值50。

enableLookups:

是否反查域名,默認值爲true。爲了提高處理能力,應設置爲false

connnectionTimeout:

網絡連接超時,默認值60000,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。通常可設置爲30000毫秒。

maxKeepAliveRequests:

保持請求數量,默認值100。

bufferSize:

輸入流緩衝大小,默認值2048 bytes。

compression:

壓縮傳輸,取值on/off/force,默認值off。

其中和最大連接數相關的參數爲maxThreads和acceptCount。如果要加大併發連接數,應同時加大這兩個參數。web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。


3、tomcat中如何禁止和允許列目錄下的文件

在{tomcat_home}/conf/web.xml中,把listings參數設置成false即可,如下:

<servlet>
...
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>

4、tomcat中如何禁止和允許主機或IP地址訪問
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Host>
如果沒有給出允許主機的指定,那麼與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那麼與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。

5、容量規劃
    A. 硬件

  採用什麼樣的硬件體系?需要多少臺計算機?使用一個大型的,還是使用多臺小型機?每個計算機上使用幾個CPU?使用多少內存?使用什麼樣的存儲設備,I/O的處理速度有什麼要求?怎樣維護這些計算機?不同的JVM在這些硬件上運行的效果如何(比如IBM AIX系統只能在其設計的硬件系統上運行)?

  B. 網絡帶寬

  帶寬的使用極限是多少?web應用程序如何處理過多的請求?

  C. 服務端操作系統

  採用哪種操作系統作爲站點服務器最好?在確定的操作系統上使用哪個JVM最好?例如,JVM在這種系統上是否支持本地多線程,對稱多處理?哪種系統可使web服務器更快、更穩定,並且更便宜。是否支持多CPU?

  D. Tomcat容量計劃

  以下介紹針對Tomcat做容量計劃的步驟:

  1) 量化負載。如果站點已經建立並運行,可以使用前面介紹的工具模仿用戶訪問,確定資源的需求量。

  2) 針對測試結果或測試過程中進行分析。需要知道那些請求造成了負載過重或者使用過多的資源,並與其它請求做比較,這樣就確定了系統的瓶頸所在。例如:如果servlet在查詢數據庫的步驟上耗用較長的時間,那麼就需要考慮使用緩衝池來降低響應時間。

  3)確定性能最低標準。例如,你不想讓用戶花20秒來等待結果頁面的返回,也就是說甚至在達到訪問量的極限時,用戶等待的時間也不能超過20秒種(從點擊鏈接到看到返第一條返回數據)。這個時間中包含了數據庫查詢時間和文件訪問時間。同類產品性能在不同的公司可能有不同的標準,一般最好採取同行中的最低標準或對這個標準做出評估。

  4)確定如何合理使用底層資源,並逐一進行測試。底層資源包括CPU、內存、存儲器、帶寬、操作系統、JVM等等。在各種生產環境上都按順序進行部署和測試,觀察是否符合需求。在測試Tomcat時儘量多采用幾種JVM,並且調整JVM使用內存和Tomcat線程池的大小進行測試。同時爲了達到資源充分合理穩定地使用的效果,還需針對測試過程中出現的硬件系統瓶頸進行處理確定合理的資源配置。這個過程最爲複雜,而且一般由於沒有可參考的值所以只能靠理論推斷和經驗總結。

  5) 如果通過第4步的反覆測試如果達到了最優的組合,就可以在相同的生產環境上部署產品了。

  此外應牢記一定要文檔化你的測試過程和結果,因爲此後可能還會進行測試,這樣就可以拿以前的測試結果做爲參考。另外測試過程要反覆多次進行,每次的條件可能都不一樣,因此只有記錄下來才能進行結果比較和最佳條件的選擇。

  這樣我們通過測試找到了最好的組合方式,各種資源得到了合理的配置,系統的性能得到了極大的提升。


出處:http://blog.csdn.net/sunnyishere/archive/2009/02/25/3934122.aspx

發佈了42 篇原創文章 · 獲贊 5 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章