1、优化Tomcat应用的JVM参数
一般情况下,只需要进入到tomcat应用的bin目录下,直接新建一个 setenv.sh 的可执行脚本,并且在 可执行脚本 setenv.sh 里面写上 相关的JVM 参数即可。
新建 setenv.sh 比直接修改 catalina.sh 文件更加简洁方便,更加不容易出错。默认情况 可执行脚本 catalina.sh 会执行和 读取 bin目录下的 可执行文件 setenv.sh,且默认情况tomcat的bin目录是不存在setenv.sh 可执行文件,需要自己创建。
# cd ${TOMCAT_BASE/bin}
cat > ${TOMCAT_BASE/bin}/setenv.sh << EOF
#!/bin/bash
# export JAVA_HOME=/usr/local/jdk1.8.0_181
# export JRE_HOME=/usr/local/jdk1.8.0_181/jre
# export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
export JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xmn1200m -Xss512k -XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m -XX:NativeMemoryTracking=summary \
-Duser.timezone=GMT+8 -Dfile.encoding=UTF-8 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/ \
-XX:+PrintGCApplicationStoppedTime -XX:+DisableExplicitGC -XX:+UseG1GC \
-XX:+PrintAdaptiveSizePolicy -XX:+PrintGCDetails -XX:+PrintGCDateStamps \
-XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC \
-Xloggc:../logs/gc.%t.log"
# 若 Tomcat 是以 高性能高并发模式 apr 运行时,需要指定 apr 库文件位置
# JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
export UMASK=0022
EOF
chmod a+x ${TOMCAT_BASE/bin}/setenv.sh
## 重启 Tomcat
# cd ${TOMCAT_BASE/bin}; sh shutdown.sh && sh startup.sh
2、注意:
要在Tomcat的bin目录执行startup.sh启动命令,此时产生的GC文件以及堆内存溢出(HeapDump)文件存放在Tomcat的logs目录下,若使用绝对路径等方法执行 startup.sh 启动Tomcat,则Tomcat产生的GC文件以及堆内存溢出文件存放目录也会相应跟着改变。
解决方法是将 setenv.sh 脚本指定的GC文件以及HeapDump溢出文件存放位置写成绝对路径即可。
生产环境要慎重考虑是否设置内存溢出的dump文件,要不然有可能会造成存储空间不足:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/