首页 > 代码库 > JVM参数

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次时便以为机器码   

 

JVM参数