java GC笔记

发布时间:2020-07-17 13:18:35 作者:上尉J
来源:网络 阅读:2317

以hbase为例:在hbase的配置文件路径下,设置了GC log输出路径/app/hbase-config/hbase-env.sh

export HBASE_OPTS="-Xmx16384m -Xms16384m -Xmn8192m -XX:PermSize=160M -XX:MaxPermSize=160M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3  -XX:+CMSParallelRemarkEnabled -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:PrintFLSStatistics=1 -Xloggc:/app/hbase/logs/hbase_gc.log $HBASE_OPTS"

可以查询到log的相关信息

#jstat -gccause 79751 1000 1000 //获取GC相关指标,表示每1000毫秒查询一次79751垃圾收集状况。
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
 参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid    — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count   — 打印次数,如果缺省则打印无数次

    S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00   8.98  11.16  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  12.79  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  14.94  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  16.04  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  17.98  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  20.34  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  21.83  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC
  0.00   8.98  22.64  69.83  12.33    156   50.788    16  280.103  330.891 unknown GCCause      No GC

E列代表
O E-->O 新生代转移到老代,O积累到80%就会触发full gc

具体意思如下:
E(表示,Eden),代表这台服务器的新生代Eden区使用了11.16的空间,
S0 S1 两个Survivor区(S0,S1表示Survivor0、Survivor1),Survivor0里面是空的,Survivor1占了8.98%

老年代(O,表示old) 和永久带(P,表示Permanent)分别使用了69.83% 和12.33%的空间。
程序运行以来共发生Minor GC(YGC ,表示young gc)156次,总耗时50.788秒;
发生Fulle GC (FGC,表示full GC )16次,full GC总耗时(FGCT,表示full gc time)为330.891秒,总的GC总耗时(GCT,表示GC Time)为330.891秒
LGCC Cause of last Garbage Collection.
GCC Cause of current Garbage Collection.

Java 6 JDK输出如下:
[hadoop@0321 logs]$ jmap -heap 29877

Attaching to process ID 29877, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 21474836480 (20480.0MB)
   NewSize          = 4294967296 (4096.0MB)
   MaxNewSize       = 4294967296 (4096.0MB)
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 67108864 (64.0MB)
   MaxPermSize      = 67108864 (64.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 3865509888 (3686.4375MB)
   used     = 481048576 (458.763671875MB)
   free     = 3384461312 (3227.673828125MB)
   12.444634470949257% used
Eden Space:
   capacity = 3436052480 (3276.875MB)
   used     = 481048576 (458.763671875MB)
   free     = 2955003904 (2818.111328125MB)
   14.00003576196834% used
From Space:
   capacity = 429457408 (409.5625MB)
   used     = 0 (0.0MB)
   free     = 429457408 (409.5625MB)
   0.0% used
To Space:
   capacity = 429457408 (409.5625MB)
   used     = 0 (0.0MB)
   free     = 429457408 (409.5625MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 12884901888 (12288.0MB)
   used     = 0 (0.0MB)
   free     = 12884901888 (12288.0MB)
   0.0% used
Perm Generation:
   capacity = 67108864 (64.0MB)
   used     = 21153816 (20.173851013183594MB)
   free     = 45955048 (43.826148986816406MB)
   31.521642208099365% used

[hbase@0321 ~]$ jps
10424 Jps
8229 HRegionServer

[hbase@0321 ~]$ jmap -heap 8229
Attaching to process ID 8229, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01

using thread-local object allocation.
Garbage-First (G1) GC with 6 thread(s)

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 25769803776 (24576.0MB)
NewSize = 1363144 (1.2999954223632812MB)
MaxNewSize = 17592186044415 MB
OldSize = 5452592 (5.1999969482421875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 16777216 (16.0MB)
MaxPermSize = 83886080 (80.0MB)
G1HeapRegionSize = 8388608 (8.0MB)

Heap Usage:
G1 Heap:
regions = 3072
capacity = 25769803776 (24576.0MB)
used = 20409483264 (19464.0MB)
free = 5360320512 (5112.0MB)
79.19921875% used
G1 Young Generation:
Eden Space:
regions = 89
capacity = 1182793728 (1128.0MB)
used = 746586112 (712.0MB)
free = 436207616 (416.0MB)
63.12056737588652% used
Survivor Space:
regions = 20
capacity = 167772160 (160.0MB)
used = 167772160 (160.0MB)
free = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions = 2324
capacity = 24419237888 (23288.0MB)
used = 19495124992 (18592.0MB)
free = 4924112896 (4696.0MB)
79.83510821023704% used
Perm Generation:
capacity = 50331648 (48.0MB)
used = 42303832 (40.344078063964844MB)
free = 8027816 (7.655921936035156MB)
84.05016263326009% used

G1 GC笔记:

关于最大gc停顿时间
在做minor gc和mixed gc时,收集器会在内存中维系一个remembered set,这个set包含了heap中所有对象的引用,用以确定哪些可以被回收。
每次gc时,g1会通过一个预测模型来计算每个region进行回收的时间,从而从中选出停顿时间在MaxGCPauseMillis之内的region进行垃圾回收
 

关于mixed gc

mixed gc是一种既回收young区,也回收old区的垃圾回收方式,它触发的条件是-XX:InitiatingHeapOccupancyPercent,mixed gc的目的就是为了延迟full gc的产生

同理YGC指的是回收young的垃圾回收方式

Full GC 指的是回收Old去的垃圾回收方式,因为old区比较大,导致GC时间比较长,并且在GC期间java进程停止对外相应,并且自身也不对外响应,导致regionserver无法向zookeeper注册心跳信息,超过zookeeper ( <name>zookeeper.session.timeout</name>) session时间,就会被zookeeper置为dead。

Hbase G1参数调整:

待修改的参数,修改GC的参数需要重启集群,安排在下次重启。

-XX:ConcGCThreads=12并发标记的执行线程数 =================== 测试数据ConcGCThreads 不能大于-XX:ParallelGCThreads,否则会报错
-XX:InitiatingHeapOccupancyPercent=60  堆占用了多少的时候就触发GC,默认为45
-XX:ParallelGCThreads=12 30

[hbase@0321 ~]$ jstat -gccapacity 61540
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
0.0 52428800.0 2490368.0 0.0 294912.0 2195456.0 0.0 52428800.0 44695552.0 44695552.0 16384.0 81920.0 49152.0 49152.0 2 0

GC 常见命令:

[hbase@ 0321 ~]$ jmap -heap 61540

Attaching to process ID 61540, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01

using thread-local object allocation.
Garbage-First (G1) GC with 30 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 53687091200 (51200.0MB)
   NewSize          = 1363144 (1.2999954223632812MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5452592 (5.1999969482421875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 16777216 (16.0MB)
   MaxPermSize      = 83886080 (80.0MB)
   G1HeapRegionSize = 16777216 (16.0MB)

Heap Usage:
G1 Heap:
   regions  = 2880
   capacity = 48318382080 (46080.0MB)
   used     = 2519304864 (2402.5963439941406MB)
   free     = 45799077216 (43677.40365600586MB)
   5.213967760403951% used
G1 Young Generation:
Eden Space:
   regions  = 7
   capacity = 2248146944 (2144.0MB)
   used     = 117440512 (112.0MB)
   free     = 2130706432 (2032.0MB)
   5.223880597014926% used
Survivor Space:
   regions  = 18
   capacity = 301989888 (288.0MB)
   used     = 301989888 (288.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 126
   capacity = 45768245248 (43648.0MB)
   used     = 2099874464 (2002.5963439941406MB)
   free     = 43668370784 (41645.40365600586MB)
   4.588059805705051% used
Perm Generation:
   capacity = 50331648 (48.0MB)
   used     = 42610464 (40.636505126953125MB)
   free     = 7721184 (7.363494873046875MB)
   84.65938568115234% used

13018 interned Strings occupying 1388240 bytes.

[hbase@0321 ~]$ jstat -gccause -h 10 61540 1000 1000

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00 100.00  92.54  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00  92.54  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00  92.54  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00  93.28  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00  93.28  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00  93.28  20.26  85.06     16    1.794     0    0.000    1.794 G1 Evacuation Pause  No GC
  0.00 100.00   1.42  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   1.42  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   3.55  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC
  0.00 100.00   4.26  21.24  85.06     17    1.877     0    0.000    1.877 G1 Evacuation Pause  No GC

#jstat -gcutil 27912 1s 50

推荐阅读:
  1. 深入研究java gc
  2. Java底层:GC相关

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java gc mixed

上一篇:Catlike学习笔记(1.3)-使用Unity画更复杂的3

下一篇:魅族4.0以上系统怎么样无root激活Xposed框架的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》