hadoop数据节点内存消耗和gc行为

bogh5gae  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(327)

最近,我们的集群(cdh5.3.1)遇到了一些问题,表现在namenodes和datanodes都陷入了从30秒到几分钟不等的长gc周期中。
jvm设置仍然是默认设置,但是考虑到我们的集群同时已经增长到3400万块,这种行为是可以解释的。
对于nn,只需简单地调整heapsize和gc设置的其他小调整(例如,年轻一代的大小、生存率)就可以再次获得可预测的短暂gc暂停。
但是对于dn,我们仍然遭受周期性的长gc暂停。我观察到异常长的gc暂停每6小时发生一次(完全gc)。现在我假设cloudera将blockreport间隔的默认值设置为6h dfs.blockreport.intervalMsec 导致了这种模式。
我想了解的是,如果有人建议我如何处理这个问题,我需要找到既能满足正常操作内存分配(似乎大部分都很好)又能满足我每6小时几分钟看到的快速分配的gc设置。
dn服务器有256gram和20个物理内核
这是java热点jdk1.7.0_。
我当前的次优设置是:

-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

我还想知道是否有一种方法可以影响blockreport的攻击性,而不是调整jvm?
有关时间范围,请参阅gc日志:http://hastebin.com/zafabohowi

7dl7o3gd

7dl7o3gd1#

好的,通过gcviewer运行日志看起来就像是有一个突发的活动(例如,从17:09开始)填满了旧的一代,直到它导致一些失败(在17:15)。
简单地尝试改变堆的大小,在任务完成之前给它更多的喘息空间。
除了并发模式失败之外,似乎还有一些相对较长的暂停,请尝试应用这些选项,看看它们是否可以缩短一些毫秒。

相关问题