JVM常用参数

JVM参数笔记

常用JDK参数表

请添加图片描述

含义解释

java -Xss128k -Xmx3550m -Xms3550m -Xmn2g

  1. -Xmx3550m:设置JVM最大可用内存3550M

  2. -Xms3550m:设置JVM最小内存为3550m
    这里有个问题,为什么一般将最大可用内存与最小可用内存设置为一样呢?因为可以防止GC后内存伸缩引起的性能问题

  3. -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代+年老代+持久代(JDK8以后)。持久代固定大小64m,增大年轻代=减少年轻代

  4. -Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K,因此需要对线程所需内存大小进行调整。

  5. -XX:NewRatio=4:设置年轻代与年老代的比值(除去持久代)。设置为4则年轻代与年老代所占比值为1:4,年轻代占整个堆1/5

  6. -XX:SurvivorRadio=4,设置两个Survivor和eden的比值

    4表示 两个survivor:eden=2:4,即一个Survivor占年轻代的1/6

如果随机发生“OOM”,可以启动以下参数

改参数意思是在发生oom时生成堆dump日志。可以配置相关路径以及文件名

-XX:+HeapDumpOnOutOfMemoryError -xx:HeapDumpPath=.

如果出现频繁GC,可以在启动jar包时添加

  1. -XX:+PrintGC 输出GC日志(现实总的GC堆变化)
  2. -XX:+PrintGCDetails 输出GC详细日志(最常用)
  3. -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息(常用)
  4. -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
  5. -Xloggc: ./logs/gc.log 日志稳健的输入路径
  6. -XX: +printCommandLineFlags 查看不同版本使用的gc

元空间相关参数

JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。
使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。

JVM 线上故障排查Shell


 1. jps #查看jvm进程号
 2. jstack #查看jvm进程的所有线程情况 “jstack -L [PID]"
 3. jmap #到处jvm进程的所有内存堆以及线程实例 “jmap -dump:format=b,file=xx {PID}"
 4. jhat #开启一个可供web访问的可视化界面 "jhat -port 7001 -J -Xmx512m <file>"

各类垃圾收集器GC参数

Serial


-XX:+UseSerialGC:在新生代和老年代使用串行收集器
 
-XX:SurvivorRatio:设置eden区大小和survivor区大小的比例
 
-XX:PretenureSizeThreshold:设置大对象直接进入老年代的阈值。当对象的大小超过这个值时,将直接在老年代分配。
 
-XX:MaxTenuringThreshold:设置对象进入老年代的年龄的最大值。每一次Minor GC后,对象年龄就加1。任何大于这个年龄的对象,一定会进入老年代

Parallel


-XX:+UseParNewGC:在新生代使用并行收集器
 
-XX:+UseParallelOldGC:老年代使用并行回收收集器
 
-XX:ParallelGCThreads:设置用于垃圾回收的线程数。通常情况下可以和CPU数量相等,但在CPU数量较多的情况下,设置相对较小的数值也是合理的。
 
-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间。他的值是一个大于0的整数。收集器在工作时,会调整Java堆大小或者其他参数,尽可能把停顿时间控制在MaxGCPauseMillis以内。
 
-XX:GCTimeRatio:设置吞吐量大小。它是0-100的整数。假设GCTimeRatio的值为n,那么系统将花费不超过1/(1+n)的时间用于垃圾收集。
 
-XX:+UseAdaptiveSizePolicy:打开自适应GC策略。在这种模式下,新生代的大小、eden和survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐量和停顿时间之间的平衡点。

CMS

-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
 
-XX:ParallelCMSThreads:设定CMS的线程数量
 
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发,默认为68%
 
-XX:+UseCMSCompactAtFullCollection:设置CMS收集器完成垃圾收集后是否要进行一次内存碎片的整理
 
-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
 
-XX:+CMSClassUnloadingEnabled:允许对类元数据区进行回收
 
-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收(前提是-XX:+CMSClassUnloadingEnabled激活了)
 
-XX:UseCMSInitiatingOccupancyOnlyn:表示只在到达阈值的时候才进行CMS回收
-XX:+ScavengeBeforeFullGC 在remark阶段进行一次年轻代的GC
-XX:+CMSScavengeBeforeRemark 在重新标记阶段前进行年轻代GC
-XX:+CMSIncrementalMode:使用增量模式,比较适合单CPU。增量模式在JDK 8中标记为废弃,并将在JDK 9中彻底移除。

G1

-XX:+UseG1GC:使用G1回收器
 
-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间
 
-XX:GCPauseIntervalMillis:设置停顿间隔时间

-XX:+UseTLAB:开启TLAB分配
 
-XX:+PrintTLAB:打印TLAB相关分配信息
 
-XX:TLABSize:设置TLAB大小
 
-XX:+ResizeTLAB:自动调整TLAB大小

这里是引用
参考的相关文章:
jvm系列(六):Java服务GC参数调优案例
JVM之GC常用配置参数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默终止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值