JVM参数通常分为几类
-
标准参数,需要所有虚拟机都要支持实现并兼容-D
设置系统属性
设置spring参数的时候或者其他环境变量的时候可以使用
-X
非标准参数,传递JVM使用,但不保证所有虚拟机都实现并向后兼容-XX
非稳定参数,控制JVM行为,跟具体虚拟机实现相关,可能会取消
-XX:+/-Flag 布尔值开关, 例 -XX:+UseG1GC 使用G1垃圾回收器
-XX:key=value 指定具体项目值
常用参数列表
标准参数
- -server server模式,运行更稳定
- -client
非标准参数
- -Xms256m 指定最小堆内存256m
- -Xmx256m 指定最大堆内存256m
通常指定 Xms=Xmx 避免jvm反复申请内存空间,建议申请空间比实际最小空间稍大一些
- -Xmn100m 指定年轻代内存空间大小,推荐配置是整个堆空间的3/8
注意一下年轻代是一个eden区+2个survivor区构成
- -Xss256k 设置栈内存大小
默认为1m,减少线程堆栈空间可以生成更多线程数。一般系统线程数 3000~5000,小应用128k,大应用256k,根据实际情况设置
非稳定参数
- -XX:+UseXXGC 指定GC收集器
- -XX:CMSFullGCsBeforeCompaction 指定运行FullGc多少次后进行内存压缩
CMS(并发-标记-清除)参数
- -XX:+/-HeapDumpOnOutOfMemoryError 当OOM时自动生成dump文件排查(推荐使用)
- -XX:HeapDumpPath=
设置dump文件存放路径,配合HeapDumpOnOutOfMemoryError使用 - -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888
开启远程调试,生产环境不使用
示例
-Xmx32g -Xms32g -Xmn1g -Xss256k-XX:SurvivorRatio=2
-XX:MaxPermSize=256m-XX:+UseParNewGC-XX:+UseConcMarkSweepGC
-XX:ParallelGCThreads=10-XX:ParallelCMSThreads=16
-XX:+CMSParallelRemarkEnabled-XX:MaxTenuringThreshold=15
-XX:+UseCMSCompactAtFullCollection
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+CMSClassUnloadingEnabled
-XX:-DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc:/app/log/hbase/gc-hbase-REGIONSERVER-`hostname`-`date +%Y%m%d`.log
JVM工具
常用的线上诊断工具
jhat
可以查看dump并生成网页端可打开的class信息,比较早的工具
jcmd
包含其他java工具中的大部分功能,可以查看堆的内存使用情况和GC情况
MAT
堆内存查看工具,可以看
下面是几个JVM监控工具
jvisualvm
jconsole
Arthas
阿里出品的JVM监控工具,集合了上述的所有功能,可以在线查看JVM运行情况,运行的class对象以及函数入参,并且进行class替换。有条件推荐使用
参考资料-1-掘金
参考资料-2-JVM参数设置大全
jvm官网
Q.E.D.