1. 程式人生 > >Tomcat和JVM的記憶體配置

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"

上述這樣的配置,基本上可以達到:

  • 系統響應時間增快
  • JVM回收速度增快同時又不影響系統的響應率
  • JVM記憶體最大化利用
  • 執行緒阻塞情況最小化

-Xms=-Xmx=伺服器記憶體*70%
如部署tomcat,jboss在同一臺伺服器 -Xms=-Xmx=伺服器記憶體*80%*1/4

(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兩個大小,如圖: