GC调优方案,步骤一:获得详细GC信息2个简单方法
2012-02-27 12:56
555 查看
环境:solaris5,jdk5
需要做GC调优,首先是要收集gc信息,不然你怎么去做调优呢。
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
输入样式:
输出格式说明:
红色字“Heap after gc invocations=776”前面内容是gc前的信息,后面内容是gc后的信息。中括号的内容是内存地址
invocations:GC次数
327680K:年轻代堆大小
297546K:年轻代已使用了大小
262144K:年轻代中eden区的大小
65536K:年轻代中survivor区的大小
2228224K:年老代堆大小
1517316K:已用年老代大小
262144K:永久区堆大小
154202K:已用永久区大小
, 0.4374109 secs:gc中断应用程序时间
从日志信息看,我更喜欢使用第二种输出,可以看出整个heap堆的不同分区的大小。
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总时间
需要做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安装路径\bin2、执行命令:./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总时间
相关文章推荐
- GC调优方案,步骤二:使用工具[IBM Pattern Modeling and Analysis Tool for Java Garbage Collector]分析gc信息
- PHP分多步骤填写发布信息的简单方法实例代码
- Androin学习笔记二十一:wifi的简单使用方法----获得本机或主机信息
- 启用win7下IIS7的http500错误详细信息提示显示的方法步骤
- PHP分多步骤填写发布信息的简单方法实例代码
- 启用win7下IIS7的http500错误详细信息提示显示的方法步骤
- 启用win7下IIS7的http500错误详细信息提示显示的方法步骤
- PHP分多步骤填写发布信息的简单方法实例代码
- GC调优方案,步骤三:尝试调优
- 用Kotlin语言写一个简单的Android Demo(有详细步骤和各种解决方法)
- 简单方法获得当前地址信息
- yii2中获得getErrors()方法中的第一条报错信息
- 如何用FFmpeg编写一个简单播放器详细步骤介绍(转载)
- 刚整了个在线查看系统项目日志的方法,步骤挺简单的,分享下。
- JS简单获得节点元素的方法示例
- Python获取服务器信息的最简单实现方法
- linux磁盘分区的详细步骤(图解linux分区命令使用方法)
- iOS里常见的几种信息加密步骤简单总结
- Mac系统安装Redis(方法二:用brew和pip,此种安装步骤简单)
- Python简单调用MySQL存储过程并获得返回值的方法