jvm企业级OPT参数命令设置参考
设置禁用IPv6
-Djava.net.preferIPv4Stack=true
linux下处理图片时需加上参数
-Djava.awt.headless=true
添加应用名称
-DappName=$SERVER_NAME
添加远程调试debug参数
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
addressPort=4100
if [ -n "$2" ]; then
addressPort=$2
fi
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=${addressPort},server=y,suspend=n "
fi
指定jvm启动初始化内存及最大化内存,新生代预估上限的默认值 ,每个线程栈大小,堆溢出log目录
JAVA_MEM_SIZE_OPTS="-Xmx${JVM_MEM_XMX} -Xms${JVM_MEM_XMS} -XX:MaxNewSize=${JVM_MEM_NEW_SIZE} -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOGS_DIR"
设置gc参数
CUR_DATE=`date +%Y%m%d`
GC_LOGFILE="$LOGS_DIR/gc_$CUR_DATE.log"
if [ ! -f "$GC_LOGFILE" ]; then
touch $GC_LOGFILE
fi
JAVA_MEM_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:$GC_LOGFILE"
备注:
加入-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime,按照参数的顺序分别输出GC的简要信息,GC的详细信息、GC的时间信息及GC造成的应用暂停的时间。
添加环境参数
ENV_PROPERTIES_OPTS="--spring.profiles.active=$ENV_NAME"
根据安装jvm的32bit或64bit版本,则设置相应的垃圾回收机制
BITS=`java -version 2>&1 | grep -i 64-bit`,
if [ -n "$BITS" ]; then
JAVA_MEM_OPTS=" -server $JAVA_MEM_SIZE_OPTS -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
JAVA_MEM_OPTS=" -server $JAVA_MEM_SIZE_OPTS -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi
备注:-XX:NewRatio=2,新生代和年老代的堆内存占用比例, 例如2表示新生代占年老代的1/2,占整个堆内存的1/3
-XX:SurvivorRatio:设置两个survivor区与eden区比例。一个survivor区占据年轻代1/4
-XX:+UseParallelGC:并行垃圾回收机制
-XX:+UseConcMarkSweepGC :并发垃圾回收机制
-XX:+DisableExplicitGC:JVM加上该启动参数,那么代码中调用System.gc()没有任何效果
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.CMS是不会整理堆碎片的,因此为了防止堆碎片引起full gc,通过会开启CMS阶段进行合并碎片选项。
-XX:CMSFullGCsBeforeCompaction=3:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
-XX:+CMSParallelRemarkEnabled:降低标记停顿,主要是为了减少第二次暂停的时间,开启并行remark
-XX:LargePageSizeInBytes=128m :设置堆内存的内存页大小,默认4m
-XX:+UseFastAccessorMethods:优化原始类型的getter方法性能
-XX:+UseCMSInitiatingOccupancyOnly:与下面这两个设置配合使用,一般用于『降低CMS GC频率或者增加频率、减少GC时长
-XX:CMSInitiatingOccupancyFraction=70:GC后,如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值
加载lib 扩展jar包
-Dloader.path=$LIBS_FILE
其他参考
指定disconf配置中心文件加载:
JAVA_PROPERTIES_OPTS="-Ddisconf.conf=$DISCONF_FILE"
指定jmx方式:
if [ "$1" = "jmx" ]; then
if [ -n "$2" ]; then
JAVA_JMX_OPTS="$JAVA_JMX_OPTS -Djava.rmi.server.hostname=$2"
fi
if [ -n "$3" ]; then
JAVA_JMX_OPTS="$JAVA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$3"
fi
JAVA_JMX_OPTS="$JAVA_JMX_OPTS -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false"
fi
启动jvm jar命令
启动命令如下:
nohup java -Dloader.path=$LIBS_FILE -jar $JAVA_OPTS $FileName $ENV_PROPERTIES_OPTS $JAVA_MEM_OPTS $JAVA_MEM_GC_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS > $STDOUT_FILE 2>&1 &