Tomcat和JVM的記憶體配置
原文路徑:https://www.cnblogs.com/pangxiansheng/p/5378537.html
JVM記憶體分配設定的引數有四個
-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堆的'新生代'的最大大小;
- Eclipse中設定JDK的記憶體方式
為什麼要設定JDK的記憶體呢?
方式一:有可能的情況是Tomcat的記憶體溢位了,我需要設定如下的引數[關於下面的設定,需要根據你電腦的記憶體地址來設定]
-Xms512M -Xmx1024M -XX:PermSize=512m -XX:MaxPermSize=1024m |
對JDK的記憶體設定操作過程如下,在Servers中找到諸如“Tomcat v6.0 Server at localhost [Stopped, Republish] ”雙擊顯示如下頁面,點選進入“Open launch configuration”--> Arguments --> 修改VM arguments中的引數配置。
方式二:增加JDK的記憶體的方法,直接在jdk下面的optional java vm arguments;
Window --> Preferences --> Java --> Install JREs --> 選中配置的JRE編輯 --> 設定Default VM arguments
- 當你感覺你的Eclipse啟動資料比較慢的時候,可以設定如下的屬性
如果使用eclipse的話,那麼在解壓的根目錄中找到eclipse.ini
如果使用sts的話,那麼在根目錄中找到STS.ini
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M |
注:這裡的所有的JVM的引數是有設定規則的,補充內容中含有
- 增加Tomcat的記憶體方式
tomcat預設可以使用的記憶體為128MB,在較大型的應用專案中,這點記憶體是不夠的,需要調大。
- linux下,在檔案{tomcat_home}/bin/catalina.sh的前面,增加如下設定:
SET JAVA_OPTS=-Xms512m -Xmx1024m
- windows下,在tomcat_home}/bin/catalina.bat的前面,增加如下設定:
SET JAVA_OPTS=-Xms512m -Xmx1024m
注:表示初始化記憶體為512MB,可以使用的最大記憶體為1024MB
- 對Tomcat的優化操作[來源自網路]
(1) 在bin/catalina.bat檔案中加入下面引數,對JVM進行優化,至於這一大駝引數的作用及說明,
請檢視文件: http://www.mzone.cc/article/321.html
JAVA_OPTS="-server -showversion -Xms1000M -Xmx1000M -XX:PermSize=256m -XX:MaxPermSize=256m" JAVA_OPTS="$JAVA_OPTS -d64 -XX:CICompilerCount=8 -XX:+UseCompressedOops" JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90" JAVA_OPTS="$JAVA_OPTS -XX:ReservedCodeCacheSize=256m -XX:-UseAdaptiveSizePolicy" JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai -XX:-DontCompileHugeMethods" JAVA_OPTS="$JAVA_OPTS -Xss256k -XX:+AggressiveOpts -XX:+UseBiasedLocking" JAVA_OPTS="$JAVA_OPTS -XX:MaxTenuringThreshold=31 -XX:+CMSParallelRemarkEnabled " JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=256m -XX:+UseFastAccessorMethods" JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true" JAVA_OPTS="$JAVA_OPTS -XX:+UseGCOverheadLimit -XX:AllocatePrefetchDistance=256 -XX:AllocatePrefetchStyle=1" JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxGCPauseMillis=200" |
上述這樣的配置,基本上可以達到:
|
-Xms=-Xmx=伺服器記憶體*70% |
(2) Tomcat連線引數的優化,主要是針對吞吐量做優化:
修改conf/server.xml檔案,把原來
<Connector port="8080" protocol="HTTP/1.1" /> |
修改內容如下:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5" useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" redirectPort="8443"/> |
一段補充說明:
搜尋【<Executor name="tomcatThreadPool"】,開啟並調整為 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" maxIdleTime="60000" minSpareThreads="20"/> 搜尋【port="8080"】,調整為 <Connector port="8080" executor=" tomcatThreadPool" //開啟執行緒池 protocol="org.apache.coyote.http11. Http11AprProtocol" //我們沒有安裝: 開啟Apr協議,需要安裝Apr支援maxHttpHeaderSize="8192" maxThreads="1000" processorCache="1000" acceptCount="1000" minSpareThreads="100" acceptorThreadCount="8" URIEncoding="UTF-8" enableLookups="false" redirectPort="8443" //關閉反向查詢 connectionTimeout="120000" keepAliveTimeout="120000" maxKeepAliveRequests="65535" disableUploadTimeout="true" compression="on" compressionMinSize="4096" //開啟靜態檔案壓縮 noCompressionUserAgents="gozilla, traviata" //開啟靜態檔案壓縮 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,appli cation/x-javascript " //開啟靜態檔案壓縮 /> |
可以通過java/jdk/bin下的java visualVM檢視eclipse的記憶體大小和tomcat的記憶體大小,主要看堆,PermGen兩個大小,如圖: