Tomcat調優

Tomcat 優化分爲系統優化,Java虛擬機調優,Tomcat本身的優化。

Tomcat 如何起停

./catalina.sh stop

./catalina.sh start
/sbin/service tomcat restart

 /webagme/tomcat/bin/catalina.sh start

1.如何調整tomcat的佔用內存

A: 方法如下:

1. linux 下編輯tomcat安裝目錄下的bin目錄下的catalina.sh文件,windows下爲catalina.bat

vi  catalina.sh

2. 查找到tomcat內存參數一行:/ JAVA_OPTS,如果找不到則在第一行寫上

3. 將JAVA_OPTS="-Xms 1024m –Xmx 1520m"一行的兩個參數依據服務器實際內存數量分別進行更改:

        - Xms爲tomcat啓動初始內存,一般爲服務器開機後可用空閒內存減去100M

        - Xmx爲tomcat最大佔用內存,一般爲服務器開機後可用空閒內存減去50M

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

說明:以上兩個參數關係到tomcat承受的訪問性能,但也要根據服務器實際內存情況設定。

有人建議Xms和Xmx的值取成一樣比較好,說是可以加快內存回收速度。但未經本人驗證過。有興趣可以試試。

 

這兩個值的大小一般根據需要進行配置。初始化堆的大小執行了虛擬機在啓動時向系統申請的內存的大小。一般而言,這個參數不重要。但是有的應用程式在大負載的情況下會急劇地佔用更多的內存,此時這個參數就是顯得很重要,假如虛擬機啓動時配置使用的內存比較小而在這種情況下有許多對象進行初始化,虛擬機就必須重複地增加內存來滿足使用。由於這種原因,我們一般把-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% 作爲堆大小。當增加處理器時,記得增加內存,因爲分配能夠並行進行,而垃圾收集不是並行的。 

 

2.如何調整tomcat的線程參數

A: 方法如下:

5.編輯tomcat安裝目錄下的conf目錄下的server.xml文件

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

maxThreads="150"     表示最多同時處理150個連接,Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。默認值200。   
minSpareThreads="25"     表示即使沒有人使用也開這麼多空線程等待  
  maxSpareThreads="75"     表示如果最多可以空75個線程,例如某時刻有80人訪問,之後沒有人訪問了,則tomcat不會保留80個空線程,而是關閉5個空的。  (一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認值50。 

   
  acceptCount="100"   當同時連接的人數達到maxThreads時,還可以接收排隊的連接數量,超過這個連接的則直接返回拒絕連接。(指定當任何能夠使用的處理請求的線程數都被使用時,能夠放到處理隊列中的請求數,超過這個數的請求將不予處理。默認值100。 )

其中和最大連接數相關的參數爲maxThreads和acceptCount。如果要加大併發連接數,應同時加大這兩個參數。
web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。tomcat5中的配置示例:
    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               acceptCount="100"/>

主要是調整maxThreads 和acceptCount的值
對於其他端口的偵聽配置,以此類推。

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

enableLookups: 

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

connnectionTimeout: 

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

maxKeepAliveRequests:

nginx動態的轉給tomcat,nginx是不能keepalive的,而tomcat端默認開啓了keepalive,會等待keepalive的timeout,默認不設置就是使用connectionTimeout。
所以必須設置tomcat的超時時間,並關閉tomcat的keepalive。否則會產生大量tomcat的socket timewait。
maxKeepAliveRequests="1"就可以避免tomcat產生大量的TIME_WAIT連接,從而從一定程度上避免tomcat假死。
試試設置tomcat/conf/server.xml:

maxKeepAliveRequests="1"
connectionTimeout="20000"

 maxKeepAliveRequests="1"表示每個連接只響應一次就關閉,這樣就不會等待timeout了。

 

    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1" 
               connectionTimeout="30000" maxKeepAliveRequests="1" 
               redirectPort="8443" bufferSize="8192" sockedBuffer="65536" acceptCount="200"/>

bufferSize: 

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

compression: 

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

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> 

cat /webgame/tomcat/conf/server.xml 



文章轉自:http://blog.csdn.net/jiangguilong2000/article/details/12523771

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章