您的位置:首页 > 其它

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

2012-02-27 12:56 555 查看
环境: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总时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: