第一步:采用jstat命令,查看gc情况
[root@agx Data]# jstat -gccause 5947 2000
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
0.00 41.67 72.78 75.99 53.50 3741 31.550 4 0.877 32.427 Allocation Failure No GC
0.00 41.67 78.74 75.99 53.50 3741 31.550 4 0.877 32.427 Allocation Failure No GC
0.00 41.67 78.74 75.99 53.50 3741 31.550 4 0.877 32.427 Allocation Failure No GC
第二步:如果发现gc频繁,可以用jmap命令看看大概哪些class比较多,大致定位问题:
[root@agx Data]# jmap -histo 5947 | more
num #instances #bytes class name
----------------------------------------------
1: 28964 31239848 [B
2: 142016 17525784 [C
3: 76447 11125808 <constMethodKlass>
4: 76447 9797328 <methodKlass>
5: 6934 8154944 <constantPoolKlass>
6: 4574 7364336 [I
7: 6934 5034312 <instanceKlassKlass>
8: 5695 4464704 <constantPoolCacheKlass>
9: 139010 3336240 java.lang.String
class name对应的就是Class文件里的class的标识
B代表byte
C代表char
D代表double
F代表float
I代表int
J代表long
Z代表boolean
前边有[代表数组,[I 就相当于int[]
对象用[L+类名表示
//todo 有待实践进一步完善