JVM常见参数总结

这篇主要讲CMS的日志格式G1的日志格式常用参数纤程 学习过程中用到的一些知识。

CMS日志分析

    首先启动linux 然后执行 命令java -Xms20M -Xmx20M -XX:+printGCDetails -XX:+UserConcMarkSweepGC com.study.jvm.gc.GcTest
Xms :堆大小
PrintGCDetails :打印GC的详细信息
UserConcMarkSweepGC:启动CMS
    看项目年轻代回收的日志信息,刚开始是YGC ,是ParNew 这个垃圾回收器来做的。Allocation Failure 分配失败了所以ParNew 开始执行对象越来越多 我的年轻代已经满了怎么办,启动我的年轻代垃圾回收器。
[GC(Allocation Failure)[Parnew : 6144k->640k(6144k),0.0265885 secs] 6585k ->2770k(19840k),0.0268035 secs [Times:user = 0.02 sys=0.00,real=0.02secs]]

  • Parnew:年轻代收集器
  • 6144->640:收集前后的对比
  • (6144):整个年轻代容量
  • 6585 ->2770:整个堆的情况
  • (19840):整个堆大小
    最主要的是在于CMS启动之后,是一个非常复杂的日志格式。里面牵扯到了CMS的一些阶段。看下面的代码注释:
[GC (CMS Initial Mark) [1 CMS-initial-mark:8511k(1369k)] 9866k(19840k),0.0040321 secs] 
[Times: user=0.01 sys=0.00,real=0.00 secs]
//CMS Initial Mark : 谁启动的
//8511 (13696) : 老年代使用(最大)
//9866 (19840) : 整个堆使用(最大)
//一般来说PN+CMS+SO,单线程对于o的区markcompact机会卡死,新生代升不到老年代了,
//如果频繁发生SerialOld卡顿,应该调小,调小代表着,原来到了68%会发生CMS,
//调小到34%就会发生CMS,那我这时候已经CMS在运行了,不断的开始回收了,哪怕这个时候对象不断的往里回收,后面预留的空间
//没问题,这个时候就不容易发生SerialOld,当然调小了也有不好的地方(频繁CMS回收)

[CMS-concurrent-mark-start]//并发标记
[CMS-concurrent-mark: 0.018/0.018 secs] [Times: user=0.01 sys=0.00,real=0.02secs]//并发时间  这里的时间意义不大 ,因为是并发执行
[CMS-concurrent-preclean-start]//清理之前的阶段,它是把某些Card标记Dirty,GC去标记的代记引用
[CMS-concurrent-preclean: 0.000/0.000 secs] [Times : user=0.00 sys= 0.00,real = 0.00 secs] //标记Card为Dirty,也称为Card Marking

]
G1日志详解

    G1要记住几个阶段回收,他都是分为几个区,G1是有STW的,不管是PS+PO还是PN+CMS都需要指定样区,XMN不指定就会有默认比例,G1 不推荐指定比例,原因是G1会动态进行调整,调整的依据就是把YGC暂停时间。
    启动G1: java -Xms20M -Xmx20M -XX:+PrintGCdetails -XX:+UserG1GC com.study.jvm.gc.GcTest
看详细的日志,发现这三个阶段它不是顺序执行的,而是在一定条件之后会触发的。

    了解了CMS和G1的日志之后再加上PS和PO的日志基本上常用的日志都见过了,如果说不知道应用程序使用哪一种垃圾回收器的时候,除了常见的方法外还可以通过日志的格式。看日志应该知道它到底是用的是哪种垃圾回收期
,下面是总结GC的常用参数,不分垃圾回收器。

GC常用参数
  • -Xmn、-Xms、 -Xms 、-Xss :年轻代、 最小堆、最大堆、栈空间
  • -XX:+UserTLAB :使用TLAB,默认打开
  • -XX:+PrintTLAB :打印TLAB的使用情况
  • -XX:+DisableExplictGC : System.gc()不管用,FGC
  • -XX:+PrintGC :打印GC信息
  • -XX:+PrintGCDetails :GC详细信息
  • -XX:+PrintHeapAtGC :GC打印堆栈情况
  • -XX:+PrintGCTimeStamps :发生GC系统时间
  • -XX:+PrintGCApplicationConcurrenTime :(低)打印应用程序时间
  • -XX:+PrintGCApplicationStoppedTime :(低)打印暂停时长
  • -XX:+PrintReferenceGC :(重要性低)记录回收了多少种不同引用类型的引用
  • -verbose:class :类加载详细过程
  • -XX:+PrintVMOptions :打印jvm的参数
  • -XX+PrintFlagsFinal -XX:+PrintFlagsInitial : 最终的 - 初始化默认的参数,这个参数必须得会用
  • -XX:MaxTenuringThreshold :GC升代年龄,最大值15
Parallel常用参数
  • -XX:SurivorRatio :比例,默认是8:1:1,可以调
  • -XX:PreTenureSizeThreshold:大对象到底多大,通过这个指定
  • -XX:MaxTenuringThreshold :GC升代年龄,最大值15
  • -XX:+ParallelGCThreads:并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
  • -XX:+UseAdaptiveSizePolicy : 自动选择各区大小比例
CMS 常用参数
  • -XX:+UserConcMarkSweepGC : CMS启动
  • -XX:ParllelCMsThreads :CMS线程数量,核默认是一半
  • -XX:CMSInitiatingOccupancyFraction :使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld 卡顿,应该调小,(频繁CMS回收)
  • -XX:UserCMSCompactAtFullColletion :当进行FGC时进行压缩,当然回收过程中耗时特别长,会损失用户的相应时间
  • -XX:CMSFullGCsBeforeCompaction :多少次CMS回收之后FGC进行压缩
  • -XX:CMSClassUnloadingEnabled:回收我们的永久代没回收方法区不用的class,1.8之前的
  • GCTimeRatio : 设置GC时间占用程序运行时间的百分比
  • -XX:MaxGCPauseMillis : 停顿时间,响应时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代
G1常用参数
  • -XX:+UseG1Gc :启动FC
  • -XX:MaxGcPauseMillis :建议值,G1会尝试调整Young区的块数来达到这个值
  • -XX:GCPauseIntervalMills : GC的间隔时间
  • -XX:G1HeapRegionSize : 分区大小,建议逐渐增大该值,1 2 4 816 32。随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长ZGC做了改进(动态区块大小)
  • G1NewSizePercent :新生代最小比例,默认5%
  • G1MaxNewSizePercent :新生代最大比例,默认60%
  • GCTimeRatio :GC时间建议比例,G1会根据这个值调整堆空间
  • ConcGcThreads :线程数量
  • InitiatingHeapOccupancyPercent : 启动G1的堆空间占用比例

到目前为止 jvm日志格式,常用参数 告一段落,纤程这一部分 下一篇再讲吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容