线上gc环境分析
jstat 和 jps 失效,参考:
http://ramosli.iteye.com/blog/1513952
原来,java进程把jvm perfdata存到了 /tmp/hsperfdata_{USER}/{PID} 文件里,我用的是ramos用户启动的tomcat,pid为14472,所以就会生成这个文件:/tmp/hsperfdata_ramos/14472 。而之前,我做过一个修改,导致ramos用户没有文件夹/tmp/hsperfdata_ramos的写权限,所以导致出现了此问题。
在此文的引导下,查看了/tmp/hsperfdata_root/下面的文件,是有的,说明只是读取权限没有,切换到root,搞定
=========================================================
查看下:
服务器1:
JVM version is 25.162-b12
Non-default VM flags: -XX:CICompilerCount=3 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2065694720 -XX:MaxNewSize=688390144 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/alidata/server/xgzt-aigw/ -Djava.security.egd=file:/dev/./urandom

服务器2:
JVM version is 25.162-b12
Non-default VM flags: -XX:CICompilerCount=3 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=130023424 -XX:MaxHeapSize=2065694720 -XX:MaxNewSize=688390144 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=42991616 -XX:OldSize=87031808 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/alidata/server/xgzt-aigw/ -Djava.security.egd=file:/dev/./urandom

************************
此前以默认参数启动,有以下特征:
新生代初始化:43m 最大 688m
老年代初始化:87m
堆初始化:130m 最大2g
未设置元空间初始化
两台机器负载均衡,gc确差异巨大
为两台机器加上
/alidata/server/jdk1.8.0_162/bin/jinfo -flag +PrintGC 31294
/alidata/server/jdk1.8.0_162/bin/jinfo -flag +PrintGCDetails 31294
/alidata/server/jdk1.8.0_162/bin/jinfo -flag +PrintGCTimeStamps 31294
约1小时之后查看
服务器1,比较意外:

[GC (Allocation Failure) [PSYoungGen: 33104K->3411K(34816K)] 74360K->44683K(134144K), 0.0048114 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 33619K->3262K(34816K)] 74891K->44543K(134144K), 0.0048242 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 33470K->3279K(34816K)] 74751K->44559K(134144K), 0.0049068 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 33487K->2403K(34816K)] 74767K->43699K(134144K), 0.0048859 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 32611K->4204K(34816K)] 73907K->45516K(134144K), 0.0052563 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 34412K->2719K(35328K)] 75724K->44039K(134656K), 0.0048853 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 32927K->2254K(32768K)] 74247K->43574K(132096K), 0.0047197 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 32462K->2720K(34816K)] 73782K->44041K(134144K), 0.0048167 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 32928K->2052K(34816K)] 74249K->43396K(134144K), 0.0048404 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
服务器2,jstat显示多了一次younggc,查看日志:

[GC (Allocation Failure) [PSYoungGen: 187182K->8180K(192000K)] 236895K->57900K(389632K), 0.0136307 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
新生代 堆
初始-目前容量-已使用-最大 初始-目前容量-已使用-最大 ygc fgc
服务器1 43m-35m-35m-688m 130m-134m-74m-2g 237 2
服务器2 43m-192m-187m-688m 130m-390m-237m-2g 4024 4
两边的gc差距及数次young gc和full gc原因:
堆和新生代初始内存设置过小而导致随机内存扩容
两台服务器不平衡调试加剧了两边扩容随机差距
jmap -heap
1
2 
浙公网安备 33010602011771号