线上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 

 

posted on 2018-07-13 14:56  silyvin  阅读(374)  评论(0)    收藏  举报