問題1:namenode進程故障
Namenode掛掉,Namenode gc日志里面YGC報錯promotion failed
現象描述
NameNode進程掛掉,Namenode gc日志里面YGC報錯promotion failed。
可能原因
Young gc的時候,需要復制eden區和from區內的對象到to區,如果此時to區滿了,就會使用悲觀策略復制到old區,而此時old區也滿了,就會報promotion failed。
定位思路
- GC參數設置不合理
- 進程內存分配過少
處理方式
方式1:
- 對於第三方管理的JVM,調低-XX:XXInitiatingOccupancyFraction值,降低觸發NN XX GC的百分比,保證old區有足夠內存。
方式2:
1.擴大NN內存。
問題2:NameNode內存FULL GC問題處理
生產集群namenode Full GC 告警頻繁
問題描述:
將standby namenode(nn1)的內存擴至80GB后,切換namenode,standby namenode在轉換為active狀態時進程死掉,查看namenode和zkfc日志發現:
standby namenode由standby轉換為active時,出現socket timeout,導致namenode狀態轉為SERVICE_NOT_RESPONDING,切換失敗。
原因
bdp生產集群文件數量達到1.9億,namenode當前內存64G,已使用約57G,內存不足,GC嚴重
處理
主機內存共128G,當前namenode內存為64GB,除namenode,resourcemanager,ZK,journalnode,ZKFC等進程已分配的內存外,剩余總內存約40G。
- 修改namenode JVM內存參數,將內存由64GB改為90GB,並分發;
- 檢查當前active namenode為nn2;
- 重啟standby namenode (nn1),確定已修改的參數已生效;
- 通過命令“hdfs haadmin -failover nn2 nn1”將active namenode切換至nn1;
- 待nn1為active,確定日志正常,且正常提供服務后,重啟nn2 namenode
- 確定nn2 UI頁面及日志正常,及已修改的參數已生效。
可選優化方向
- 文件數量達到1.9億,導致namenode元數據量過大,可合並小文件以減少namenode內存使用,避免Full GC。
- 在core-site.xml文件中修改ha.health-monitor.rpc-timeout.ms參數值,來擴大zkfc監控檢查超時時間。