论坛首页 编程语言技术论坛

JVM 常见调优参数

浏览 2841 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2017-05-08  

@@内存调优@@

#初始堆大小   最大堆大小

-Xms(-XX:InitialHeapSize) 

#最大堆大小

-Xmx (-XX:MaxHeapSize)

 

#让JVM在发生内存溢出时自动的生成堆内存快照

-XX:+HeapDumpOnOutOfMemoryError

 

#内存溢出时 存放路径

#默认情况下,保存在JVM的启动目录下名为java_pid<pid>.hprof 的文件里

-XX:HeapDumpPath

 

#当内存溢出发生时执行操作

-XX:OnOutOfMemoryError ="sh ~/cleanup.sh"

 

#设置持久代大小

-XX:PermSize 

#设置持久代最大值

-XX:MaxPermSize

 

 

@@新生代垃圾回收@@

#指定新生代大小

-XX:NewSize and -XX:MaxNewSize

 

#设置新生代和老年代的相对大小

-XX:NewRatio

#-XX:NewRatio=3 指定老年代/新生代为3/1. 老年代占堆大小的 3/4 ,新生代占 1/4 .

 

 

#-XX:SurvivorRatio 指定伊甸园区(Eden)与幸存区大小比例

XX:SurvivorRatio=10 

表示伊甸园区(Eden)是幸存区To大小的10倍(也是幸存区From的10倍) 伊甸园区(Eden)占新生代大小的10/12

 

#指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布

-XX:+PrintTenuringDistribution

 

#指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布。

-XX:+PrintTenuringDistribution 

 

 

#设定老年代阀值  幸存区空间目标使用率

XX:MaxTenuringThreshold=10 

-XX:TargetSurvivorRatio=90 

设定老年代阀值的上限为10,幸存区空间目标使用率为90%。

 

 

@@吞吐量收集器@@

#该标志来激活串行垃圾收集器

-XX:+UseSerialGC

 

#选择垃圾收集器为并行收集器 [关注吞吐量]

-XX:+UseParallelGC

 

#选择垃圾收集器为并行收集器 [老年代 优于-XX:+UseParallelGC]

-XX:+UseParallelOldGC

 

吞吐量为垃圾回收时间与非垃圾回收时间的比值 

#-XX:GCTimeRatio=<N>来设定,公式为1/(1+N)

-XX:GCTimeRatio=<value>

 

 

最大暂停时间(具有优先级)

-XX:MaxGCPauseMillis

 

@@CMS收集器@@

HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。

CMS收集器为老年代垃圾回收提供了几乎完全并发的解决方案,年轻代仍然通过“stop-the-world”方法来进行收集

 

 

会面临两个主要的挑战,需调优:

1 堆碎片

  -- Full GC 处理

2 对象分配率高

  -- 老年代将没有足够的可用空间来容纳一个从年轻代提升过来的对象。

  -- 称为“并发模式失败”,并且JVM会执行堆碎片整理:触发Full GC。

 

 

#激活CMS收集器

-XX:+UseConcMarkSweepGC

 

#该标志激活年轻代使用多线程并行执行垃圾回收

-XX:UseParNewGC

[对于CMS收集器,年轻代GC算法和老年代GC算法是不同的]

 

#以多线程执行并发CMS

-XX:+CMSConcurrentMTEnabled

 

#定义并发CMS过程的线程数(需在生产或压测环境下 根据情况调优)

-XX:ConcGCThreads=<value>

#value=4意味着CMS周期的所有阶段都以4个线程来执行。

#默认 ConcGCThreads = (ParallelGCThreads + 3)/4

 

 

#老年代堆空间的使用率

-XX:CMSInitiatingOccupancyFraction

eg value=75意味着第一次CMS垃圾收集会在老年代被占用75%时被触发。

 

#收集器的增量模式(慎用)

-XX:+CMSIncrementalMode

增量模式经常暂停CMS过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。

通过测试后发现正常CMS周期对应用程序线程干扰太大时,才应该使用增量模式。

 

#永久代也被包括进CMS垃圾回收

XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

保证当有系统GC调用时,永久代也被包括进CMS垃圾回收的范围内。

 

@@GC日志@@

#开启了简单GC日志模式

-XX:+PrintGC

无法从日志中判断是否GC将一些对象从young generation移到了old generation

 

#开启了详细GC日志模式

-XX:PrintGCDetails

 

#将时间和日期也加到GC日志中

-XX:+PrintGCTimeStamps

-XX:+PrintGCDateStamps

 

#缺省的GC日志时输出到终端的,使用-Xloggc:也可以输出到指定的文件

-Xloggc

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics