Tomcat用了two years+,沒有深究過配置信息,只是簡單的改改端口,最近在搭建測試Server的時候,單機有四個Tomcat實例,發現8G的內存不知不覺的就被用完了,甚至是20G的硬盤都被一次意外吃完了,內存是由於Tomcat中添加了最大內存2G最小1G,硬盤是由於Jenkins的Tomcat出現大量異常,打印了10+G的log(contains catalina.out),後來去掉內存設置,感受當時內存倒是少了很多,Tomcat的自帶日誌也直接關閉,後來日誌打印是正常關閉了,可是內存,仍是認爲偏高,由於是測試,因此對性能要求不是很高,後來開始瞭解Tomcat的參數配置,網上的信息太繁雜,沒有獲得一個滿意的answer,另外,其實我的比較偏向於官方的默認配置,並且網上的資料大都是人云亦云,就簡單的JAVA_OPTS/CATALINA_OPTS配置來講,網上都說添加配置到catalina.sh,可是與Tomcat官方的說法,有兩點出入(${CATALINA_HOME}/html
RUNNING.txtjava
):
spring
0配置信息添加到${CATALINA_HOME}/bin/setenv.shmvc
1不推薦使用JAVA_OPTS,由於stop等命令也會使用該配置,應使用CATALINA_OPTSoracle
另外關閉Tomcat的自帶日誌,經過spring mvc的interceptor來記錄RuntimeException,避免丟失未捕獲的異常紀錄。jvm
JAVA VM args:-server性能
0查看默認參數:測試
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version' uintx AdaptivePermSizeWeight = 20 {product} uintx ErgoHeapSizeLimit = 0 {product} uintx InitialHeapSize := 66328448 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 1063256064 {product} uintx MaxPermSize = 67108864 {pd product} uintx PermSize = 16777216 {pd product} java version "1.6.0_24" $ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version' uintx AdaptivePermSizeWeight = 20 {product} uintx ErgoHeapSizeLimit = 0 {product} uintx InitialHeapSize := 16777216 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 268435456 {product} uintx MaxPermSize = 67108864 {pd product} uintx PermSize = 12582912 {pd product} java version "1.6.0_24"
經過JMC查看Tomcat運行的內存佔用,如圖:
ui
JAVA8後,內存結構發生變化,具體的暫時沒有進行調研,走一個簡單的記錄,分別對應以下參數:
spa
-Xmx768M -Xms768M 設定初始化和最大的Heap -XX:ReservedCodeCacheSize=128M 設定Code Cach -XX:MaxMetaspaceSize=128M 設定Metaspace -XX:CompressedClassSpaceSize=256M 設定Compressed Class Space
具體參數的大小與性能的影響,暫時不肯定,待更新