参数
说明
1.堆内存参数设置
-Xms
或
-XX:InitialHeapSize=n
设置堆的初始值
指令1:-Xms2g
指令2:-XX:InitialHeapSize=2048m
-Xmx
或
-XX:MaxHeapSize=n
设置堆区最大值
指令1:
-Xmx2g
指令2: -XX:MaxHeapSize=2048m-XX:NewSize=n设置年轻代大小
-Xss
或
-XX:ThreadStackSize=n
每个线程堆栈最大值
指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k
注意:
默认堆栈大小为1M,应该128K就够用,大的堆栈建议256K,栈设置太大,会导致线程创建减少。栈设置小,会导致深入不够,深度的递归会导致栈溢出。
-Xmn
或
-XX:MaxNewSize=n
新生代内存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m-XX:SurvivorRatio=n
2个survivor区和Eden区大小比率
指令:-XX:SurvivorRatio=8(默认)
年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个,S区和Eden区在新生代比例为1:8,两个S区2:8
-XX:NewRatio=n
新生代和老年代的占比
-XX:NewRatio=2(默认)
表示新生代:老年代 = 1:2 即老年代占整个堆的2/3;默认值=2
如果-Xms==-Xmx,且设置了-Xmn的情况下,不用设置此参数。
-Duser.timezone=GMT+08指定时区‐Dfile.encoding=UTF‐8指定默认的文件编码
2.垃圾回收器设置
-XX:+PrintGC
简单打印GC日志-XX:+PrintGCDetails详细打印GC日志-XX:+PrintHeapAtGC打印GC前后详细的堆栈信息-XX:+PrintGCTimeStampsGC发生时,额外输出GC发生的时间,该输出时间为虚拟机启动后的时间偏移量-XX:+PrintGCDateStampsGC发生时,带时区的日期打印-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,应用程序未中断执行时间-XX:+PrintGCApplicationStoppedTime打印应用程序由于GC而产生的停顿时间-XX:+PrintReferenceGC跟踪系统内的软引用,弱引用,虚引用和Finallize队列
2.1 GC回收日志打印
-Xloggc:log/gc.log
指定gc日志输出的文件路径。
JDK8开始支持使用%p,%t等占位符来指定GC输出文件。分别表示进程pid和启动时间戳。
例如:
-Xloggc:/data/gclog/gc.log 固定路径名称生成
-Xloggc:/data/gclog/gc-%t.log 根据时间生成
-Xloggc:/data/gclog/gc-%p.log 根据进程pid生成
-XX:+UseGCLogFileRotation滚动生成日志
日志文件达到一定大小后,生成另一个文件,须配置-Xloggc-XX:NumberOfGCLogFiles=n-XX:NumberOfGCLogFiles=4 滚动GC日志文件数,默认0,不滚动,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发-XX:GCLogFileSize=n-XX:GCLogFileSize=100k GC文件滚动大小,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发
2.2 堆内存溢出配置
-XX:+HeapDumpOnOutOfMemoryError
内存溢出时导出整个堆信息,让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./log/dump/
-XX:HeapDumpPath指定导出堆的存放路径-XX:OnOutOfMemoryError=“”
利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。
-XX:OnOutOfMemoryError="/opt/local/bin/alert.sh"
-XX:+HeapDumpBeforeFullGC实现在Full GC前dump
-XX:HeapDumpPath=/logs/设置Dump保存的路径-XX:+HeapDumpAfterFullGC
实现在Full GC后dump
-XX:HeapDumpPath=/logs/设置Dump保存的路径
2.3 垃圾回收器配置
-XX:+UseSerialGC允许使用串行垃圾收集器。对于不需要垃圾收集的任何特殊功能的小型和简单应用程序,这通常是最佳选择。默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。-XX:+UseParallelGC
允许使用并行清除垃圾收集器(也称为吞吐量收集器),通过利用多个处理器来提高应用程序的性能。
默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。如果已启用,则会
-XX:+UseParallelOldGC
自动启用该选项,除非您明确禁用它。
-XX:+UseParalledlOldGC允许将并行垃圾收集器用于完整的GC。默认情况下,禁用此选项。启用它会自动启用该
-XX:+UseParallelGC
选项。-XX:+UseConcMarkSweepGC
允许为老年代使用CMS垃圾收集器。Oracle建议您在spam(
-XX:+UseParallelGC
)垃圾收集器无法满足应用程序延迟要求时使用CMS垃圾收集器。G1垃圾收集器(
-XX:+UseG1GC
)是另一种选择。
默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。启用此选项后,将
-XX:+UseParNewGC
自动设置该选项,您不应禁用该选项,因为JDK 8中已弃用以下选项组合:
-XX:+UseConcMarkSweepGC -XX:-UseParNewGC
-XX:+UseParNewGC允许在年轻代中使用并行线程进行收集。默认情况下,禁用此选项。设置
-XX:+UseConcMarkSweepGC
选项时会自动启用它。使用
-XX:+UseParNewGC
不带选项
-XX:+UseConcMarkSweepGC
的选择是在JDK 8弃用-XX:+UseG1GC允许使用垃圾优先(G1)垃圾收集器。它是一个服务器式垃圾收集器,针对具有大量RAM的多处理器机器。它以高概率满足GC暂停时间目标,同时保持良好的吞吐量。G1收集器推荐用于需要大堆(大小约为6 GB或更大)且GC延迟要求有限的应用(稳定且可预测的暂停时间低于0.5秒)-XX:ParallelGCThreads=n
GC并行执行线程数
-XX:ParallelGCThreads=16
3.辅助指令(查看或修改正在运行的JVM 某项配置)
jinfo -flag 参数 pid
查看HeapDumpOnOutOfMemoryError 配置是否开启
jinfo -flag HeapDumpOnOutOfMemoryError 10001
修改HeapDumpOnOutOfMemoryError 配置(-关闭 +开启)
jinfo -flag +HeapDumpOnOutOfMemoryError 10001
-XX:+PrintFlagsFinal
查看jvm参数配置
-XX:+PrintFlagsFinal |grep GC 查看与GC相关参数配置
-XX:+PrintCommandLineFlags
打印已经被用户或者当前虚拟机设置过的参数
-XX:+PrintCommandLineFlags -version 查看GC堆的初始大小以及GC收集器类型
4.JDK8的JVM启动参数默认配置
-Xms2g -Xmx2g (按不同容器,4G及以下建议为50%,6G以上,建议设置为70%)
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
-Xss256k
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:AutoBoxCacheMax=20000
-XX:+HeapDumpOnOutOfMemoryError (当JVM发生OOM时,自动生成DUMP文件)
-XX:HeapDumpPath=/data/logs/gc/
-XX:ErrorFile=/data/logs/gc/hs_err_%p.log (当JVM发生崩溃时,自动生成错误日志)
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/data/logs/gc/gc-ePrint-service.log
4.禁止和废弃参数选项
-Xincgc
启用增量垃圾收集。此选项在JDK 8中已弃用,无需替换。
-Xrun libname
加载指定的调试/分析库。此选项已被该选项取代
-agentlib
。
-XX:CMSIncrementalDutyCycle = 百分比
设置允许并发收集器运行的次要集合之间的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换
-XX:+CMSIncrementalMode
。
-XX:CMSIncrementalDutyCycleMin = 百分比
设置次要集合之间的时间百分比(0到100),它
-XX:+CMSIncrementalPacing
是启用时占空比的下限。在弃用选项后,此选项在JDK 8中已弃用,没有替换
-XX:+CMSIncrementalMode
。
-XX:+ CMSIncrementalMode
启用CMS收集器的增量模式。此选项在JDK 8中已弃用,没有替换,以及其他选项
CMSIncremental
。
-XX:CMSIncrementalOffset = 百分比
设置增量模式占空比在次要集合之间的时间段内向右移动的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换
-XX:+CMSIncrementalMode
。
-XX:+ CMSIncrementalPacing
根据JVM运行时收集的统计信息,启用增量模式占空比的自动调整。在弃用选项后,此选项在JDK 8中已弃用,没有替换
-XX:+CMSIncrementalMode
。
-XX:CMSIncrementalSafetyFactor = 百分比
设置计算占空比时用于添加保守性的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换
-XX:+CMSIncrementalMode
。
-XX:CMSInitiatingPermOccupancyFraction = 百分比
设置启动GC的永久生成占用率(0到100)的百分比。此选项在JDK 8中已弃用,无需替换。
-XX:MaxPermSize = size
设置最大永久生成空间大小(以字节为单位)。此选项在JDK 8中已弃用,并由该
-XX:MaxMetaspaceSize
选项取代。
-XX:PermSize = size
设置分配给永久生成的空间(以字节为单位),如果超出则会触发垃圾回收。此选项在JDK 8中已弃用,并被该
-XX:MetaspaceSize
选项取代。
-XX:+ UseSplitVerifier
允许拆分验证过程。默认情况下,此选项在先前版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已弃用,现在默认情况下会对验证进行拆分,而无法将其禁用。
-XX:+ UseStringCache
启用常用分配字符串的缓存。此选项已从JDK 8中删除,无需替换。
版权归原作者 NettyBoy 所有, 如有侵权,请联系我们删除。