Jvm常用启动参数整理

查看任何一个JVM参数的默认值

java -XX:+PrintFlagsFinal -version |grep MetaspaceSize

下面的模板摘自线上核心业务系统的jvm启动模板

-XX:-UseBiasedLocking 
-XX:AutoBoxCacheMax=20000 
-Xloggc:/filepath/gc.log 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath="/filepath/" 
-XX:ErrorFile="/filepath/hs_err_pid<pid>.log" 
-XX:+PrintCommandLineFlags 
-XX:-OmitStackTraceInFastThrow 
-XX:+UseConcMarkSweepGC 
-XX:CMSInitiatingOccupancyFraction=75 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:MaxTenuringThreshold=6 
-XX:+ExplicitGCInvokesConcurrent 
-XX:+ParallelRefProcEnabled 
-server 
-Xmx4g 
-Xms4g 
-XX:NewRatio=1 
-XX:MetaspaceSize=128m 
-XX:MaxMetaspaceSize=512m 

server or client

服务端的形式启动jvm,会有很多系统参数的优化相对于client客户端的模式。java -version可以查看当前默认是Server模式还是Client模式image.png

UseBiasedLocking

偏向锁开关,-代表关闭,+代表打开,线上目前是关闭状态

AutoBoxCacheMax

java的Integer对象中有一个IntegerCache缓存,IntegerCache有一个静态代码块,JVM在加载Integer这个类时,会优先加载静态的代码。当JVM进程启动完毕后, -128 ~ +127 范围的数字会被缓存起来,调用valueOf方法的时候,如果是这个范围内的数字,则直接从缓存取出。超过这个范围的则构造新的Integer对象。

loggc

指定gc日志文件

PrintGCApplicationStoppedTime

打印垃圾回收期间程序暂停的时间

PrintGCDateStamps

GC发生的时间信息

PrintGCDetails

打印GC详细信息

HeapDumpOnOutOfMemoryError

OutOfMemoryError发生时导出dump文件

HeapDumpPath

dump文件的目录

ErrorFile

错误文件,当java发生致命错误时,例如jdk的bug等。记录错误日志用于上报分析

PrintCommandLineFlags

可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX参数的配置值

OmitStackTraceInFastThrow

省略异常栈信息从而快速抛出,默认为开启状态,如果开启该参数,JVM会对一些特定的异常类型做Fast Throw优化,如果检测到在代码里某个位置连续多次抛出同一类型异常的话(treat_throw_as_hot=true),则用Fast Throw方式来抛出异常,而异常Trace及详细的异常栈信息会被清空。这种异常抛出速度非常快,因为不需要在堆里分配内存,也不需要构造完整的异常栈信息
JVM只对几个特定类型异常开启了Fast Throw优化:

  • NullPointerException
  • ArithmeticException
  • ArrayIndexOutOfBoundsException
  • ArrayStoreException
  • ClassCastException

UseConcMarkSweepGC

老年代使用cms收集器

CMSInitiatingOccupancyFraction

CMS垃圾收集器,当老年代内存使用达到指定配置比例时,触发CMS垃圾回收

UseCMSInitiatingOccupancyOnly

指定HotSpot-VM总是使用-XX:CMSInitiatingOccupancyFraction的值作为old的空间使用率限制来启动CMS垃圾回收。如果没有使用-XX:+UseCMSInitiatingOccupancyOnly,那么HotSpot-VM只是利用这个值来启动第一次CMS垃圾回收,后面都是使用HotSpot-VM自动计算出来的值。

MaxTenuringThreshold

对象经历多少次Minor-GC才晋升到旧生代,默认值是15

ExplicitGCInvokesConcurrent

System.gc()是正常FULL GC,会STW,打开此参数后,在做System.gc()时会做background模式CMS GC,即并行FULL GC,可提高FULL GC效率
注,该参数在允许systemGC且使用CMS GC时有效

ParallelRefProcEnabled

采用多线程的方式发现需要处理的finalize方法的对象,非多线程执行对象的finalize方法;如果应用有大量的引用或者finalizable对象需要处理,指定下面这个选项可以减少垃圾回收的时间,他会使用多个的引用处理线程,而不是单个线程。这个选项不会启用多线程运行方法的finalizer。他会使用很多线程去发现需要排队通知的finalizable对象。

mx

java heap堆最大内存

ms

java heap堆初始化内存

NewRatio

新老代内存比,老年代:新生代,-XX:NewRatio=8 新老代内存比,老年代:新生代=8:1

SurvivorRatio

-XX:SurvivorRatio=8 新生代内存比,Eden园:survivor区=8:1,由于存活区survivor有两个,所以是2/10比例

MetaspaceSize

1.8之后不再有持久带概念,取而代之的为Metaspace,指定MetaspaceSize大小
Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC;且之后每次Metaspace扩容都可能会发生FGC

MaxMetaspaceSize

与上面配置对应的最大值,默认是一个极大的值,例如:18446744073709547520
如果MaxMetaspaceSize设置太小,可能会导致频繁FullGC,甚至OOM
查看默认配置:java -XX:+PrintFlagsFinal -version |grep MetaspaceSize

PrintSafepointStatistics

打印安全点统计的一些分析信息

PrintSafepointStatisticsCount

-XX:PrintSafepointStatisticsCount=1 打印安全点统计信息count值,与上面的PrintSafepointStatistics参数同时开启使用才会打印统计信息

ss

栈大小

NativeMemoryTracking

Native Memory Tracking(NMT)是Java7U40引入的HotSpot新特性,可用于监控JVM原生内存的使用,但比较可惜的是,目前的NMT不能监控到JVM之外或原生库分配的内存。java进程启动时指定开启NMT(有一定的性能损耗),输出级别可以设置为“summary”或“detail”级别。
开启后,通过jcmd可以访问收集到的数据

// 开启:-XX:NativeMemoryTracking=summary 或者 -XX:NativeMemoryTracking=detail
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff 

UnlockDiagnosticVMOptions

Enable normal processing of flags

PrintNMTStatistics

Print native memory tracking summary data if it is on
-XX:+UnlockDiagnosticVMOptions必须配合参数{2}使用,并且只能加在其后才能生效
可以通过上面两个VM参数在JVM退出时打印NMT报告

发布了81 篇原创文章 · 获赞 85 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u010597819/article/details/98447361