GC调优方案,步骤一:获得详细GC信息2个简单方法

环境:solaris5,jdk5

需要做GC调优,首先是要收集gc信息,不然你怎么去做调优呢。

方法一:通过配置JVM参数,自动产生日志文件

要收集gc信息,可以在JVM参数中需要设置打印gc信息。下面是配置JVM日志参数详解:

JVM日志参数配置一:

-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:serverGC.log

输入样式:

481.991: [GC 481.991: [ParNew: 248412K->53301K(294912K), 0.2264667 secs] 2313927K->2137697K(2523136K), 0.2274222 secs]

483.324: [Full GC 483.325: [ParNew: 249962K->53149K(294912K), 0.2936765 secs] 2334358K->2156729K(2523136K), 0.2945332 secs]

输出格式说明:

ParNew:                      GC收集器的名称

248412K:   新生代在GC前占用的内存

53301K:     新生代在GC后占用的内存

294912K:   新生代堆大小

0.2264667 secs               新生代局部收集时jvm暂停处理的时间

2313927K   JVM Heap 在GC前占用的内存

2137697K     JVM Heap 在GC后占用的内存

2523136K :JVM Heap 总大小

0.2274222 secs                GC过程中jvm暂停处理的总时间

 

JVM日志参数配置二:

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:serverGC.log

输入样式:

12090.442: [GC {Heap before gc invocations=775:

 par new generation   total 327680K, used 297546K [0xfffffffec0000000, 0xfffffffed8000000, 0xfffffffed8000000)

  eden space 262144K, 100% used [0xfffffffec0000000, 0xfffffffed0000000, 0xfffffffed0000000)

  from space 65536K,  54% used [0xfffffffed4000000, 0xfffffffed6292820, 0xfffffffed8000000)

  to   space 65536K,   0% used [0xfffffffed0000000, 0xfffffffed0000000, 0xfffffffed4000000)

 concurrent mark-sweep generation total 2228224K, used 1517316K [0xfffffffed8000000, 0xffffffff60000000, 0xffffffff60000000)

 concurrent-mark-sweep perm gen total 262144K, used 154202K [0xffffffff60000000, 0xffffffff70000000, 0xffffffff70000000)

12090.442: [ParNew: 297546K->43374K(327680K), 0.4362126 secs] 1814862K->1564027K(2555904K)Heap after gc invocations=776:

 par new generation   total 327680K, used 43374K [0xfffffffec0000000, 0xfffffffed8000000, 0xfffffffed8000000)

  eden space 262144K,   0% used [0xfffffffec0000000, 0xfffffffec0000000, 0xfffffffed0000000)

  from space 65536K,  66% used [0xfffffffed0000000, 0xfffffffed2a5b990, 0xfffffffed4000000)

  to   space 65536K,   0% used [0xfffffffed4000000, 0xfffffffed4000000, 0xfffffffed8000000)

 concurrent mark-sweep generation total 2228224K, used 1520652K [0xfffffffed8000000, 0xffffffff60000000, 0xffffffff60000000)

 concurrent-mark-sweep perm gen total 262144K, used 154202K [0xffffffff60000000, 0xffffffff70000000, 0xffffffff70000000)

}

, 0.4374109 secs]

输出格式说明:

红色字“Heap after gc invocations=776”前面内容是gc前的信息,后面内容是gc后的信息。中括号的内容是内存地址

invocations:GC次数

327680K:年轻代堆大小

297546K:年轻代已使用了大小

262144K:年轻代中eden区的大小

65536K:年轻代中survivor区的大小

2228224K:年老代堆大小

1517316K:已用年老代大小

262144K:永久区堆大小

154202K:已用永久区大小

, 0.4374109 secs:gc中断应用程序时间

 

从日志信息看,我更喜欢使用第二种输出,可以看出整个heap堆的不同分区的大小。

 

方法二:使用jdk命令,产生日志文件

1、进入jdk安装路径\bin

2、执行命令:./jstat -gcutil [PID] 10000>>gc.log    #就会每隔10秒产生一次gc信息输出到gc.log文件中,格式如下

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
100.00   0.00  65.64  49.73  56.73     42    8.649    24  110.087  118.736

s0和s1是新生代susvivoro2个区

E是eden区

O是年老代

P是持久代

YGC        minor gc执行次数

YGCT      minor gc执行耗费时间

FGC        Full gc执行次数

FGCT      Full gc执行耗时

GCT        gc总时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值