Tomcat參數調優包括日志、線程數、內存【轉】


【Tomcat中日志打印對性能測試的影響】

一般都提供了這樣5個日志級別:

▪ Debug

▪ Info

▪ Warn

▪ Error

▪ Fatal

由於性能測試需要並發進行壓力測試,如果日志級別是info或者debug就會嚴重影響系統的性能,磁盤IO讀寫和網絡會造成瓶頸,所以性能測試或者上線系統的日志級別需要修改為WARN或者ERROR,日志文件為/tomcat/apache-tomcat-7.0.40/webapps/HSEAP/WEB-INF/conf/ log4j.properties;

【Tomcat中線程數對性能測試的影響】

Tomcat的文件需要進行調優設置,文件為./apache-tomcat-7.0.40/conf/server.xml

web性能測試前調優設置,你知道多少?

以上參數主要是用來前台連接數,最大為600,最小為25,當連接超過400時就開始有效釋放鏈接,最大鏈接超時時間為20000(這個不是唯一的,需要修改這幾個參數進行幾次壓力測試找到系統最優的線程數和連接數大小)。

Maxthreads可創建的最大線程數,minsparethreads初始線程數,maxsparethread創建的線程數超過該數時自動關閉不再需要的socket線程;connectiontimeout連接超時時間。

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

【JVM的設置】

在./apache-tomcat-7.0.40/bin/catalina.sh中第一行增加:JAVA_OPTS="-server -Xms1024m - Xmx2048m -XX:PermSize=128M -XX:MaxPermSize=256m"

由於Tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,有可能導致系統無法運行。常見的問題是報Tomcat內存溢出錯誤,Out of Memory(系統內存不足)的異常,從而導致客戶端顯示500錯誤,一般調整Tomcat的使用內存即可解決此問題。一般是這樣設置,出現內存問題再根據實際情況進行調整,Xms和Xmx可以設置一樣的值。

-Xmx :Java Heap最大值,默認值為物理內存的1/4。

-Xms :Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留默認值。

-Xmn :Java Heap Young區大小,不熟悉最好保留默認值。

-Xss :每個線程的Stack大小,不熟悉最好保留默認值。

-XX:PermSize :設定內存的永久保存區域。

-XX:MaxPermSize :設定最大內存的永久保存區域。

-XX:PermSize :設定內存的永久保存區域。

-XX:NewSize :設置JVM堆的‘新生代’的默認大小。

-XX:MaxNewSize :設置JVM堆的‘新生代’的最大大小。

▲堆內存分配

JVM初始分配的內存由-Xms指定,默認是物理內存的1/64。VM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空余堆內存小於 40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。

因此服務器一般設置-Xms、 -Xmx相等以避免在每次GC 后調整堆的大小。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行堆內存設置,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值,建議堆的最大值設置為可用內存的最大值的80%。

初始化堆的大小是JVM在啟動時向系統申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地占用更多的內存,此時這個參數就是顯得非常重要,如果JVM啟動時設置使用的內存比較小而在這種情況下有許多對象進行初始化,JVM就必須重復地增加內存來滿足使用。

由於這種原因,我們一般把-Xms和-Xmx設為一樣大,而堆的最大值受限於系統使用的物理內存。一般使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時JVM就會提示內存溢出,並且導致應用服務崩潰。所以,如果Xms超過了Xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者操作系統的最大限制都會引起服務器啟動不起來。

▲非堆內存分配

也叫永久保存的區域,用於存放Class和Meta信息,Class在被Load的時候被放入該區域。它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理。JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。 GC不會對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。

▪ OutOfMemoryError: Java heap space 堆溢出。

內存溢出主要存在問題就是出現在這個情況中。當在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。

▪ OutOfMemoryError: PermGen space 非堆溢出(永久保存區域溢出)。

這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。如果web app用了大量的第三方jar或者應用有太多的class文件而恰好MaxPermSize設置較小,超出了也會導致這塊內存的占用過多造成溢出,或者tomcat熱部署時侯不會清理前面加載的環境,只會將context更改為新部署的,非堆存的內容就會越來越多。

所以為了避免上述2個OutOfMemoryError問題的出現,設置JVM的大小就是非常有必要的。

轉自

web性能測試前調優設置,你知道多少?
http://www.toutiao.com/i6471429094465602061/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM