tomcat優化方案

1.內存設置(VM參數調優)

(1).
Windows環境下,是tomcat解壓版(執行startup.bat啓動tomcat) ,解決辦法:


修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設置:

set JAVA_OPTS=-Xms512m -Xmx512m
-XX:PermSize=128M -XX:MaxNewSize=256m
-XX:MaxPermSize=512m


備註:一定加在catalina.bat最前面。

(2).
Windows環境下,是tomcat安裝版(利用windows的系統服務啓動tomcat),解決辦法:


修改註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun
2.0\Tomcat6\Parameters\JavaOptions

原值爲:

-Dcatalina.home=E:\Tomcat 6.0

-Dcatalina.base=E:\Tomcat 6.0

-Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed

-Djava.io.tmpdir=E:\Tomcat 6.0\temp

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager


-Djava.util.logging.config.file=E:\Tomcat
6.0\conf\logging.properties

加入:

Xms512m -Xmx512m -XX:PermSize=128M
-XX:MaxNewSize=256m -XX:MaxPermSize=512m


重起tomcat服務,設置生效。

(3). Linux環境下, ,解決辦法:

修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設置:JAVA_OPTS=’-Xms256m
-Xmx512m’



各參數詳解:

-Xms:設置JVM初始內存大小(默認是物理內存的1/64)

-Xmx:設置JVM可以使用的最大內存(默認是物理內存的1/4,建議:物理內存80%)

-Xmn:設置JVM最小內存(128-256m就夠了,一般不設置)


默認空餘堆內存小於
40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、
-Xmx相等以避免在每次GC 後調整堆的大小。

在較大型的應用項目中,默認的內存是不夠的,有可能導致系統無法運行。常見的問題是報Tomcat內存溢出錯誤“java.lang.OutOfMemoryError:
Java heap space”,從而導致客戶端顯示500錯誤。



-XX:PermSize :爲JVM啓動時Perm的內存大小

-XX:MaxPermSize :爲最大可佔用的Perm內存大小(默認爲32M)

-XX:MaxNewSize,默認爲16M


PermGen space的全稱是Permanent Generation
space,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen
space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage
Collection)不會在主程序運行期對PermGen
space進行清理,所以如果你的應用中有很CLASS的話,就很可能出現“java.lang.OutOfMemoryError:
PermGen space”錯誤。

對於WEB項目,jvm加載類時,永久域中的對象急劇增加,從而使jvm不斷調整永久域大小,爲了避免調整),你可以使用更多的參數配置。如果你的WEB
APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小,那麼就會產生此錯誤信息了。

其它參數:

-XX:NewSize :默認爲2M,此值設大可調大新對象區,減少Full
GC次數

-XX:NewRatio :改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認爲8)

-XX:SurvivorRatio :改變Eden對象空間和殘存空間的尺寸比例,意思是Eden對象空

間的尺寸比殘存空間大survivorRatio+2倍(缺省值是10)

-XX:userParNewGC 可用來設置並行收集【多CPU】

-XX:ParallelGCThreads 可用來增加並行度【多CPU】

-XXUseParallelGC 設置後可以使用並行清除收集器【多CPU】


2.修改tomcat讓其支持NIO

修改前:

protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"/>

修改成支持NIO的類型,配置如下 :

protocol="org.apache.coyote.http11.Http11NioProtocol
"
 connectionTimeout="20000" redirectPort="8443" />

3.併發數設置

默認的tomcat配置,併發測試時,可能30個USER上去就當機了。

添加



maxThreads="600" //最大線程數

minSpareThreads="100" //初始化時創建的線程數

maxSpareThreads="500" //一旦線程超過這個值,Tomcat會關閉不需要的socket線程

acceptCount="700"//指定當所有可以使用的處理請求的線程數都被使用時,可以放到

處理隊列中的請求數,超過這個數的請求將不予處理


connectionTimeout="20000"

redirectPort="8443" />



或者

name="tomcatThreadPool"
namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="400"
/>



executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1" connectionTimeout="20000"
enableLookups="false"

redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000"
/>

4.Java虛擬機調優

應該選擇SUN的JVM,在滿足項目需要的前提下,儘量選用版本較高的JVM,一般來說高版本產品在速度和效率上比低版本會有改進。
JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。

5.禁用DNS查詢

設置enableLookups="false":

enableLookups="false"
redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000"
/>

 當web應用程序向要記錄客戶端的信息時,它也會記錄客戶端的IP地址或者通過域名服務器查找機器名轉換爲IP地址。DNS查詢需要佔用網絡,
並且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP的過程,這樣會消耗一定的時間。爲了消除DNS查詢對性能的影響我們可以關閉
DNS查詢,方式是修改server.xml文件中的enableLookups參數值爲false。

6.設置解決亂碼問題

URIEncoding="UTF-8"
acceptCount="1000" />

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