Java GC 日志分析

  • Post author:
  • Post category:java

一、java 虚拟机一些参数

-Dosgi.requiredJavaVersion=1.5     // -D表示设置property 参数,在java代码里面就可以使用System.getProperties(“osgi.requiredJavaVersion”)获取这个值
-Xverify:none        //加载代码的时候不进行验证,信任代码的情况下使用,如eclipse启动时可以加这个参数,加快启动速度
-verbose:gc
-Xms512m
-Xmx512m
-Xmn128m          //Yong(年轻代)的初始大小,一般Xms的1/4
-XX:+UseConcMarkSweepGC   //使用CMS垃圾收集器收集老年代
-XX:+PrintGCDetails                   //输出GC日志
-XX:+PrintGCDateStamps
-Xloggc:gc.log                             //gc日志输出,可以指定路径
-XX:PermSize=64m                    //永久代的初始大小
-XX:MaxPermSize=64m
-XX:+DisableExplicitGC             //禁用System.gc()调用

 

二、加上如上参数后打印的日志

2012-11-15T16:57:06.118+0800: 2.089: [GC 2.089: [ParNew: 104960K->13056K(118016K), 0.1720037 secs] 104960K->48670K(511232K), 0.1721610 secs] [Times: user=0.28 sys=0.01, real=0.17 secs]
2012-11-15T16:57:07.618+0800: 3.583: [GC 3.583: [ParNew: 117987K->13056K(118016K), 0.0986891 secs] 153601K->64983K(511232K), 0.0988357 secs] [Times: user=0.14 sys=0.01, real=0.09 secs]
2012-11-15T16:57:10.696+0800: 6.669: [GC 6.669: [ParNew: 118016K->13056K(118016K), 0.0685054 secs] 169943K->78453K(511232K), 0.0686582 secs] [Times: user=0.14 sys=0.00, real=0.08 secs]
2012-11-15T16:57:12.524+0800: 8.490: [GC 8.490: [ParNew: 118016K->11244K(118016K), 0.0525525 secs] 183413K->83007K(511232K), 0.0527229 secs] [Times: user=0.08 sys=0.00, real=0.05 secs]

以其中一例分析:

2012-11-15T16:57:12.524+0800: 8.490: [GC 8.490: [ParNew: 118016K->11244K(118016K), 0.0525525 secs] 183413K->83007K(511232K), 0.0527229 secs] [Times: user=0.08 sys=0.00, real=0.05 secs]

8.490 :表示虚拟机启动运行到8.490秒是进行了一次monor Gc ( not Full GC)

ParNew :表示对年轻代进行的GC,使用ParNew 收集器

118016K->11244K(118016K) :118016K  年轻代收集前大小,11244K 收集完以后的大小 , 118016K  当前年轻代分配的总大小

0.0525525 secs :表示对年轻代进行垃圾收集是,用户线程暂停的时间,即此次年轻代收集花费的时间

183413K->83007K(511232K) :JVM heap堆收集前后heap堆内存的变化

0.0527229 secs :整个JVM此次垃圾造成用户线程的暂停时间。

 

更全一点的参数说明:

[GC [<collector>: <starting occupancy1> -> <ending occupancy1>, <pause time1> secs] <starting occupancy3> -> <ending occupancy3>, <pause time3> secs]
<collector>                      GC收集器的名称
<starting occupancy1>    新生代在GC前占用的内存
<ending occupancy1>     新生代在GC后占用的内存
<pause time1>                 新生代局部收集时jvm暂停处理的时间
<starting occupancy3>    JVM Heap 在GC前占用的内存
<ending occupancy3>     JVM Heap 在GC后占用的内存
 <pause time3>                GC过程中jvm暂停处理的总时间

 

 

 


版权声明:本文为feiyu8607原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。