tomcat的記憶體使用配置,最大連接配接數配置。
如何修改配置呢,在/tomcat的/bin/下面有個腳本檔案catailna.sh。 如果 windows 是bat設定tomcat的使用記憶體,其實就是設定jvm的使用參數。
一.tomcat記憶體優化
tomcat記憶體優化主要是對 tomcat 啟動參數優化,我們可以在 tomcat 的啟動腳本 catalina.sh 中設定 java_opts 參數。
1.java_opts參數說明
java代碼
-server 啟用jdk 的 server 版;
-xms java虛拟機初始化時的最小記憶體;
-xmx java虛拟機可使用的最大記憶體;
-xx:permsize 記憶體永久保留區域
-xx:maxpermsize 記憶體最大永久保留區域
設定tomcat啟動的初始記憶體,其初始空間(即-xms)是實體記憶體的1/64,最大空間(-xmx)是實體記憶體的1/4。可以利用jvm提供的-xmn -xms -xmx等選項,要加“m”說明是mb,否則就是kb了,在啟動tomcat時會報記憶體不足。
-xms:初始值 【初始化記憶體大小】
-xmx:最大值 【可以使用的最大記憶體】
-xmn:最小值
jvm堆的設定是指java程式運作過程中jvm可以調配使用的記憶體空間的設定.jvm在啟動的時候會自動設定heap size的值,其初始空間(即-xms)是實體記憶體的1/64,最大空間(-xmx)是實體記憶體的1/4。可以利用jvm提供的-xmn -xms -xmx等選項可進行設定。heap size 的大小是young generation 和tenured generaion 之和。
提示:在jvm中如果98%的時間是用于gc且可用的heap size 不足2%的時候将抛出此異常資訊。
提示:heap size 最大不要超過可用實體記憶體的80%,一般的要将-xms和-xmx選項設定為相同,而-xmn為1/4的-xmx值。 這兩個值的大小一般根據需要進行設定。初始化堆的大小執行了虛拟機在啟動時向系統申請的記憶體的大小。一般而言,這個參數不重要。但是有的應用 程式在大負載的情況下會急劇地占用更多的記憶體,此時這個參數就是顯得非常重要,如果虛拟機啟動時設定使用的記憶體比較小而在這種情況下有許多對象進行初始 化,虛拟機就必須重複地增加記憶體來滿足使用。由于這種原因,我們一般把-xms和-xmx設為一樣大,而堆的最大值受限于系統使用的實體記憶體。一般使用數 據量較大的應用程式會使用持久對象,記憶體使用有可能迅速地增長。當應用程式需要的記憶體超出堆的最大值時虛拟機就會提示記憶體溢出,并且導緻應用服務崩潰。因 此一般建議堆的最大值設定為可用記憶體的最大值的80%。
如果系統花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過 3-5 秒。如果垃圾收內建為瓶頸,那麼需要指定代的大小,檢查垃圾收集的詳細輸出,研究 垃圾收集參數對性能的影響。一般說來,你應該使用實體記憶體的 80% 作為堆大小。當增加處理器時,記得增加記憶體,因為配置設定可以并行進行,而垃圾收集不是并行的。
在重新開機你的tomcat伺服器之後,這些配置的更改才會有效。
windows在檔案{tomcathome}/bin/catalina.bat,unix在檔案{tomcathome}/bin/catalina.sh的前面,增加如下設定:
伺服器參數配置
tomcat預設: -xms1024m -xmx1024m -xss1024k -xx:permsize=128m -xx:maxpermsize=256m
java_opts參數
java_opts="-djava.awt.headless=true -dfile.encoding=utf-8
-server -xms2048m -xmx2048m
-xx:newsize=512m -xx:maxnewsize=512m -xx:permsize=512m
-xx:maxpermsize=512m -xx:+disableexplicitgc"
配置完成後可重新開機tomcat ,通過以下指令進行檢視配置是否生效:
1.首先檢視tomcat 程序号:
ps -ef | grep tomcat
我們可以看到tomcat 程序号是 9217
1.檢視是否配置生效:
sudo jmap –heap 9217
我們可以看到maxheapsize 等參數已經生效。
二.tomcat并發優化
1.tomcat連接配接相關參數
在tomcat配置檔案conf下面 server.xml 中的配置中和連接配接數相關的參數有:
minprocessors:最小空閑連接配接線程數,用于提高系統處理性能,預設值為10
maxprocessors:最大連接配接線程數,即:并發處理的最大請求數,預設值為75
acceptcount:允許的最大連接配接數,應大于等于maxprocessors,預設值為100
enablelookups:是否反查域名,取值為:true或false。為了提高處理能力,應設定為false
connectiontimeout:網絡連接配接逾時,機關:毫秒。設定為0表示永不逾時,這樣設定有隐患的。通常可設定為30000毫秒。
1.參數說明
預設的tomcat 參數:
修改:
maxthreads="600"
minsparethreads="100"
maxsparethreads="500"
acceptcount="700"
connectiontimeout="20000"
redirectport="8443" />
這樣設定以後,基本上沒有再當機過。
protocol="org.apache.coyote.http11.http11nioprotocol" ///使用java的異步io護理技術,no blocking io
maxthreads=“600" 表示最多同時處理600個連接配接 ///最大線程數
minsparethreads=“100" 表示即使沒有人使用也開這麼多空線程等待 ///初始化時建立的線程數
maxsparethreads=“500" 表示如果最多可以空500個線程,例如某時刻有505人通路,之後沒有人通路了,則tomcat不會保留505個空線程,而是關閉505個空的。 ///一旦建立的線程超過這個值,tomcat就會關閉不再需要的socket線程。
acceptcount="700"//指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求将不予處理
這裡是http connector的優化,如果使用apache和tomcat做叢集的負載均衡,并且使用ajp協定做apache和tomcat的協定轉發,那麼還需要優化ajp connector。
解決常遇到的一些報錯
一、tomcat的jvm提示記憶體溢出
檢視%tomcat_home%logs檔案夾下,日志檔案是否有記憶體溢出錯誤
二、修改tomcat的jvm
1、錯誤提示:java.lang.outofmemoryerror: java heap space
tomcat預設可以使用的記憶體為128mb,在較大型的應用項目中,這點記憶體是不夠的,有可能導緻系統無法運作。常見的問題是報tomcat記憶體溢出錯誤,out of memory(系統記憶體不足)的異常,進而導緻用戶端顯示500錯誤,一般調整tomcat的使用記憶體即可解決此問題。
windows環境下修改
“%tomcat_home%bincatalina.bat”檔案,在檔案開頭增加如下設定:java_opts=-xms2048m -xmx2048m
linux環境下修改
“%tomcat_home%bincatalina.sh”檔案,在檔案開頭增加如下設定:java_opts=-xms2048m -xmx2048m
其中,-xms設定初始化記憶體大小,-xmx設定可以使用的最大記憶體。
跟我上面那麼設定就可以了。
2、錯誤提示:java.lang.outofmemoryerror: permgen space
原因:
permgen space的全稱是permanent generation space,是指記憶體的永久儲存區域,這塊記憶體主要是被jvm存
放class和meta資訊的,class在被loader時就會被放到permgen space中,它和存放類執行個體(instance)的heap區域不同,gc(garbage collection)不會在主程式運作期對permgen space進行清理,是以如果你的應用中有很class的話,就很可能出現permgen space錯誤,這種錯誤常見在web伺服器對jsp進行pre compile的時候。如果你的web app下都用了大量的第三方jar, 其大小超過了jvm預設的大小(4m)那麼就會産生此錯誤資訊了。
解決方法:
在catalina.bat的第一行增加:
set java_opts=-xms64m -xmx256m -xx:permsize=128m -xx:maxnewsize=256m - xx:maxpermsize=256m
在catalina.sh的第一行增加:
java_opts=-xms64m -xmx256m -xx:permsize=128m -xx:maxnewsize=256m xx:maxpermsize=256m
三、檢視tomcat的jvm記憶體
tomcat6中沒有設定任何預設使用者,因而需要手動往tomcat6的conf檔案夾下的tomcat-users.xml檔案中添加使用者。 如:
注:添加完需要重新開機tomcat6。
然後在如下面的jvm下可以看到記憶體的使用情況。