ResourceManager GC
GC,指Garbage Collection 是JAVA中的垃圾收集器。
现象
在系统运行高峰期,YARN的RM无法登录或登录界面现实特别慢。应用执行也特别慢。
分析与解决方案
根据经验,系统RM无法登录,那么有可能是RM进程有问题,所以查看RM进行日志。
查看RM的GC日志resourcemanager-omm-20170214200940-pid13297-gc.log.8,发现大量的FULL GC。
出现FULL GC说明RM内存已用光,无可分配资源,故无法RM出现hang住状态。
解决方案:
- 调整RM的最大可用内存限制
- 重启YARN
详解知识点
在YARN的GC日志中GC分为三种:普通GC,CMS GC,FULL GC
Minor GC:
在GC日志中此正常情况下会进出现此日志。其中1844453K->1740908K(2084096K) 内存总:2084096K 已用内存从1844453K释放到1740908K
2017-02-16T09:53:26.409+0800:: GC发生的时间;
135825.482::GC开始,相对JVM启动的相对时间,单位是秒;
GC::区别Minor GC、CMS GC、Full GC的标识,这次代表的是Minor GC;
Allocation Failure:: MinorGC的原因,在这个case里边,由于年轻代不满足申请的空间,因此触发了MinorGC;
ParNew ::收集器的名称,它预示了年轻代使用一个并行的 mark-copy stop-the-world 垃圾收集器;
114914K->9992K::收集前后年轻代的使用情况;
(118016K)::整个年轻代的容量;
0.0119158 secs::回收操作所用时间;
1843767K->1739516K::收集前后整个堆的使用情况;
(2084096K)::整个堆的容量;
0.0122177 secs::ParNew收集器标记和复制年轻代活着的对象所花费的时间(包括和老年代通信的开销、对象晋升到老年代时间、垃圾收集周期结束一些最后的清理对象等的花销);
[Times: user=0.12 sys=0.00, real=0.01 secs]::GC事件在不同维度的耗时,具体的用英文解释起来更加合理:
- user : Total CPU time that was consumed by Garbage Collector threads during this collection
- sys : Time spent in OS calls or waiting for system event
- real : Clock time for which your application was stopped. With Parallel GC this number should be close to (user time + system time) divided by the number of threads used by the Garbage Collector. In this particular case 8 threads were used. Note that due to some activities not being parallelizable, it always exceeds the ratio by a certain amount.
CMS GC:
当系统繁忙时,会出现CMS GC,此时说明系统已经非常繁忙了,内存不足了。CMS的目标是尽量减少应用的暂停时间,减少full gc发生的几率。
FULL GC:
如果出现FULL GC,那么说明系统已经出现问题。4.4891712 secs表示整个JVM都停顿了4.48秒。
jstat查看GC
运行结果如下:
S0 :: Heap上的 Survivor space 0 区已使用空间的百分比(年轻代中第一个survivor(幸存区)已使用的占当前容量百分比)
S1 :: Heap上的 Survivor space 1 区已使用空间的百分比 (年轻代中第二个survivor(幸存区)已使用的占当前容量百分比)
E :: Heap上的 Eden space 区已使用空间的百分比 (年轻代中Eden(伊甸园)已使用的占当前容量百分比)
O :: Heap上的 Old space 区已使用空间的百分比 (old代已使用的占当前容量百分比)
P :: Perm space 区已使用空间的百分比(perm代已使用的占当前容量百分比)
YGC :: 从应用程序启动到采样时发生 Young GC 的次数
YGCT::从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC :: 从应用程序启动到采样时发生 Full GC 的次数 (从应用程序启动到采样时old代(全gc)gc次数)
FGCT::从应用程序启动到采样时 Full GC 所用的时间(单位秒) (从应用程序启动到采样时old代(全gc)gc所用时间(s))
GCT :: 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
通过FGC我们可以发现系统是否发生FULL GC和FULL GC的频率