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
具体参数的大小与性能的影响,暂时不肯定,待更新