JVM参数
# java可执行文件位置 export JAVA_HOME=/data/jdk # 设置项目代码路径 export CODE_HOME="/data/webserver/cgi-startup-package" # 日志路径 export LOG_PATH="/data/webserver/logs/cgi.senyint.local" mkdir -p $LOG_PATH # 设置依赖路径 export CLASSPATH="$CODE_HOME/classes:$CODE_HOME/lib/*" # java可执行文件位置 export _EXECJAVA="$JAVA_HOME/bin/java" # JVM启动参数 # 打印参数 FLAG_OPTS="-XX:+PrintCommandLineFlags" # 内存参数 MEMORY_OPTS="-Xms2048m -Xmx2048m -Xmn1024m -XX:MaxDirectMemorySize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m" # 性能参数 # -XX:+PerfDisableSharedMem: 解决: JVM statistics cause garbage collection pauses, 导致: jps, jstat不可用 PERFORMANCE_OPTS="-XX:-UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch -XX:AutoBoxCacheMax=20000 -XX:ReservedCodeCacheSize=240m" # GC CMS参数 CMS_GC_OPTS="-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled" # GC 日志参数 GC_OPTS="-Xloggc:/dev/shm/cgi-gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails" # 异常参数 ERROR_OPTS="-XX:-OmitStackTraceInFastThrow -XX:ErrorFile=${LOG_PATH}/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_PATH}/" # JMX JMX_PORT="18888" JMX_OPTS="-Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1" export JAVA_OPTS="-server $FLAG_OPTS $MEMORY_OPTS $PERFORMANCE_OPTS $CMS_GC_OPTS $GC_OPTS $ERROR_OPTS $JMX_OPTS" # 启动类 export MAIN_CLASS=com.senyint.cgi.startup.Bootstrap nohup $_EXECJAVA $JAVA_OPTS -classpath $CLASSPATH $MAIN_CLASS >/dev/null 2>&1 &
GC -XX:+PrintGC 打印GC日志 -XX:+PrintGCDetails 打印详细的GC日志 -Xloggc:/var/gc.log 将GC日志打印在根目录的var文件夹下的gc.log文件中 class -verbose:class 打印类加载和卸载信息 堆内存 -Xmx2048m 最大堆内存 -Xms2048m 最小堆内存 -Xmn512m 新生代内存 -XX:SurvivorRatio 值为eden/from=eden/to -XX:+HeapDumpOnOutOfMemoryError 在内存溢出时导出整个堆信息 -XX:HeapDumpPath=/var/heap.dump 指定导出堆的存放路径 方法区 -XX:PermSize=50m 方法区大小 -XX:MaxPermSize=50m 方法区最大大小 Metaspace -XX:MaxMetaspaceSize 指定元空间的大小,默认情况下,只受限于系统内存大小 栈 -Xss1m 直接内存 -XX:MaxDirectMemorySize 最大可用直接内存,默认最大值为-Xmx,直接内存使用量达到该值时,触发垃圾回收 垃圾回收器 -XX:UseSerialGC 使用serial/serial old垃圾回收器 -XX:PrintGCApplicationStoppedTime:查看STW时间 -XX:UseParNewGC 使用parNew/serial old -XX:ParallelGCThreads parNew的GC线程数 Parallel -XX:+UseParallelGC 使用Parallel Scavenge/serial Old -XX:+UseParallelOldGC 使用Parallel Scavenge/Parallel Old -XX:GCTimeRatio:直接设置吞吐量大小,假设设为19,则允许的最大GC时间占总时间的1/(1+19),默认值为99,即1/(1+99) -XX:MaxGCPauseMillis:最大GC停顿时间,该参数并非越小越好 -XX:+UseAdaptiveSizePolicy:开启该参数,-Xmn/-XX:SurvivorRatio/-XX:PretenureSizeThreshold这些参数就不起作用了,虚拟机会自动收集监控信息,动态调整这些参数以提供最合适的的停顿时间或者最大的吞吐量(GC自适应调节策略),而我们需要设置的就是-Xmx,-XX:+UseParallelOldGC或-XX:GCTimeRatio两个参数就好(当然-Xms也指定上与-Xmx相同就好) CMS -XX:+UseConcMarkSweepGC 使用parNew/CMS -XX:CMSInitiatingOccupancyFraction 指定当年老代空间满了多少后进行垃圾回收。默认68,即68% -XX:+UseCMSCompactAtFullCollection (默认是开启的)在CMS收集器顶不住要进行FullGC时开启内存碎片整理过程,该过程需要STW -XX:CMSFullGCsBeforeCompaction 指定多少次FullGC后才进行整理 -XX:ParallelCMSThreads 指定CMS回收线程的数量,默认为:(CPU数量+3)/4 -XX:+CMSPermGenSweepingEnabled与-XX:+CMSClassUnloadingEnabled 使用CMS进行方法区的回收 G1 -XX:+UseG1GC 使用G1 对象进入年老代 -XX:MaxTenuringThreshold=15 复制过15次后 -XX:PretenureSizeThreshold=1000 大于1000字节的对象直接进入年老代 JIT -XX:CounterHalfLifeTime 半衰周期 -XX:CompileThreshold 默认server模式是10000,即在半衰周期内方法调用次数达到10000次,将该方法编译为机器码 -XX:-UseCounterDecay 关闭上述机制,即半衰周期的无穷大 -XX:OnStackReplacePercent 用于计算循环体执行的次数,server模式下通过该值算出来的回边数是10700,即循环体执行10700次时便以为机器码