在catalina.sh中,新增以下配置项到文件开头
#CATALINA_OPTS=
"-server -d64 jvm运行为服务器模式,支持64位系统
-verbose:class 显示jvm载入类的相关信息
-verbose:gc 显示每次GC相关信息
-Duser.timezone=Asia/Shanghai
-Djava.awt.headless=true #启用该项,可解决报表不兼容的问题
-Djava.security.egd=file:/dev/./urandom #替代默认的/dev/random阻塞生成因子
-Xms1024m #堆的初始大小
-Xmx1024m #堆的最大大小
-Xss256k #每个线程的大小
-Xmn384m #年轻代大小
-XX:SurvivorRatio=8 #Eden区与Survivo区的比值
-XX:TargetSurvivorRatio=80 当s区使用占比多少时,对其进行回收
-XX:CICompilerCount=4 #编译器数目增加
-XX:MaxTenuringThreshold=6 #晋升到老年代需要的存活次数
-XX:InitialCodeCacheSize=32k 设置初始代码缓存的大小
-XX:ReservedCodeCacheSize=256m 设置即时编译器的使用最大代码缓存大小
-XX:+DisableExplicitGC #关闭System.gc()
-XX:+AggressiveOpts #加快编译
-XX:+UseBiasedLocking #锁机制的性能改善,增加偏向锁
-XX:-UseAdaptiveSizePolicy #不启动自适应策略
-XX:+HeapDumpOnOutOfMemoryError #在JVM崩溃时,可以dump出错误日志信息
-XX:HeapDumpPath=${catalina.base}/logs/java_pid%p.hprof #dump错误信息日志信息存放的路径
-XX:+PrintGCDetails #记录gc日志
-XX:+PrintGCDateStamps #打印可读日期
-Xnoclassgc #不做类的gc
-XX:+UseConcMarkSweepGC #使用cms并发收集器
-XX:+UseParNewGC 新生代使用该收集器进行垃圾回收
-XX:MaxGCPauseMillis=300 进行垃圾回收时,最大暂停时间,单位毫秒
-XX:LargePageSizeInBytes=0 jvm堆中页面的大小,为0则表示JVM自动设置页面大小
-XX:+UseCMSInitiatingOccupancyOnly 当使用的内存大小到达一定数量的值后,才开始进行垃圾回收
-XX:CMSInitiatingOccupancyFraction=90 #触发full gc的内存使用百分比
-XX:+UseGCOverheadLimit #当垃圾回收耗费了98%的时间,但回收的内存不到2%时,jvm认为发生了OOM,可以起到预警的作用
-XX:AllocatePrefetchDistance=512
-XX:AllocatePrefetchStyle=2
-XX:+PrintClassHistogram #当jvm收到SIGQUIT信号,打印类统计信息,如Ctrl+Break
-XX:+ExplicitGCInvokesConcurrent -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses #启用这2项,可减少fullgc的卡顿时间
-XX:+AlwaysPreTouch #启动时访问并置零内存页面,大堆时效果比较好
"
"
-Xms:堆的初始大小,单位MB 配置-Xms与-Xmx一致,为可用内存的80%
-XmX:堆的最大大小,单位MB
-Xmn:新生代的初始大小,单位MB 为堆大小的3/8=24/64
当业务中有数据量很大的文件需要导出时,需要调整以下2个参数的值,可避免出现OOM
-XX:PermSize:持久代的初始大小,单位MB 为物理内存的1/64
-XX:MaxPermSize:持久代的最大大小,单位MB 为物理内存的1/4=16/64
-Xss:线程栈的大小,单位MB,如要调整,推荐1~2MB
-XX:NewRatio:年老代与新生代的比值
-XX:SurvivoRatio:Eden区与Survivo区的比值
-XX:ParallelGCThreads 并行的线程数
"
# -----------------------------------------------------------------------------
JAVA_OPTS="-server -d64 -Djava.awt.headless=true -verbose:class -verbose:gc -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom"
JAVA_OPTS="$JAVA_OPTS -Xms1g -Xmx1g -Xmn1024m -Xss512k -XX:SurvivorRatio=8"
JAVA_OPTS="$JAVA_OPTS -XX:TargetSurvivorRatio=80 -XX:CICompilerCount=4 -XX:MaxTenuringThreshold=6 -XX:ParallelGCThreads=4"
JAVA_OPTS="$JAVA_OPTS -XX:InitialCodeCacheSize=32k -XX:ReservedCodeCacheSize=256m"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:-UseAdaptiveSizePolicy"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat_admin/logs/java_pid%p.hprof"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/local/tomcat_admin/logs/gc.log"
JAVA_OPTS="$JAVA_OPTS -Xnoclassgc -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:MaxGCPauseMillis=300 -XX:LargePageSizeInBytes=0"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80"
JAVA_OPTS="$JAVA_OPTS -XX:+UseGCOverheadLimit -XX:AllocatePrefetchDistance=512 -XX:AllocatePrefetchStyle=2""