Hadoop DataNode内存消耗和GC行为

时间:2015-05-28 13:41:26

标签: hadoop garbage-collection jvm

最近我们遇到了我们的集群(CDH 5.3.1)的问题,这些问题表现在NameNodes以及DataNodes被卡在长GC周期中,从30秒到几分钟不等。

JVM设置仍然是默认设置,但鉴于我们的集群同时增长到3400万个块,行为可以解释。

对于NN,对GC设置(例如年轻基因大小,幸存者)的大小调整和其他微调整的简单调整使我们再次获得可预测的短GC暂停。

对于DN而言,我们仍然会遭受周期性的长时间GC暂停。我观察到的是每6小时发生异常长的GC暂停(Full GC)。现在我假设Cloudera为块报告间隔dfs.blockreport.intervalMsec设置默认值为6 h,这有助于这种模式。

我想了解的是,如果有建议我如何解决这个问题,我需要找到既满足正常运行内存分配的GC设置(似乎大部分都很好)以及快速分配我每隔6小时就会看到几分钟。

DN服务器有256G RAM& 20个物理核心

这是Java Hotspot jdk1.7.0_67。

我目前的次优设置是:

-server 
-Xmn5g 
-Xms12884901888 
-Xmx12884901888 
-XX:SurvivorRatio=3 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:+CMSConcurrentMTEnabled 
-XX:CMSInitiatingOccupancyFraction=60 
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:+ScavengeBeforeFullGC 
-XX:+CMSScavengeBeforeRemark 
-XX:MaxTenuringThreshold=15 

我也有兴趣听说是否有一种方法可以影响阻止报告,而不是调整JVM?

有关时间范围,请参阅gc log: http://hastebin.com/zafabohowi

1 个答案:

答案 0 :(得分:1)

好的,通过GCViewer运行日志似乎只是一阵活动(例如从17:09开始)填满了老一代,直到它导致一些失败(17:15)

只需尝试碰撞堆大小,以便在任务完成之前为其提供更多的喘息空间。

并发模式失败之外,似乎还有一些相对较长的暂停,请尝试应用these options来查看它们是否可以减少几毫秒。