关于hadoop namenode jvm设置的思考与调整

本文主要探讨了Hadoop Namenode收到内存使用百分比告警的原因,指出告警源于Namenode JVM进程的堆内存使用情况。作者分析了JVM的堆内存结构和GC策略,提出告警百分比的意义并不大,且由于无法直接限制Old Generation堆大小,告警仍可能超过90%。解决方案是在生产环境中调整Namenode JVM参数,例如设置-Xmx和-Xms为相同值,并启用详细GC日志进行观察。文章还介绍了JVM的垃圾回收算法和不同类型的垃圾回收器,以及如何手动触发GC。

这两天经常会收到hadoop namenode 内存使用百分比的告警,经常收到告警是一个讨厌的事情,是不是说明我们系统超负荷有问题了?怎么样解决这个问题?这两天一直在仔细查考测试这个问题,现将我的思考说明一下。

1.      首先,这个告警message说的是namenode这台机器真的内存的使用百分比,其实并不太准确。事实上它不是说明机器内存用光了,而是namenode的jvm进程堆内存使用快光了。


2.      我们知道jvm的堆内存是指HeapSize,这个由-Xmx设定最大值,-Xms设定初始值。如果Xms<Xmx,那么当前实际HeapSize是介于Xms与Xmx两者之间的,我们用CurrentHeapSize表示,其中包括使用了的(used)和未使用的(free)。而堆内存又分Young Generation和Old Generation,主要是两种采用了不同垃圾回收gc策略,我用YoungHeapSize和OldHeapSize表示,其中也包括使用了的(used)和未使用的(free),。当然Young Generation又分(Eden区和Survivor区),但在这里,事实上我们不需要关注Young Generation细分到的不同区。


3.      不管是Young 还是Old,当usedYoung等于Young或者usedOld等于Old,就会启动gc, 并且会增加YoungHeapSize和OldHeapSize直到两者相加等于Xmx.


4.      因此这个告警之前采集的百分比:usedCurrentHeapSize/Xmx=(usedCurrentYoungHeapSize+usedCurrentOldHeapSize)/Xmx,到full gc时刻,会最终等于(CurrentYoungHeapSize+CurrentOldHeapSize)/Xmx。现在收到超过90%的告警,说明的就是(CurrentYoungHeapSize + CurrentOldHeapSize)快接近Xmx了,并且到了即将full gc时刻。如果想要不收到超过90%的告警,也就是说我们必须(CurrentYoungHeapSize + CurrentOldHeapSize)最大值小一些,留一些缓冲。但是CurrentYoungHeap和CurrentOldHeap会不断增加,直到两者相加等于Xmx,除非能够设定MaxYoungHeapSize和MaxOldHeapSize.


5.      但是我仔细查考了jvm相关的参数,能够设定YoungHeap和OldHeap的就2个参数

a)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值