NameNode节点存在ALM-12027主机PID使用率超过阈值告警
问题背景与现象
3.1.2及之前的3.x版本集群,NameNode节点存在ALM-12027主机PID使用率超过阈值告警,节点Java进程可能出现“unable to create new native thread”报错。
原因分析
- 使用以下命令统计节点进程的线程数并排序。
ps -efT | awk '{print $2}' |sort -n |uniq -c |sort -n
执行后结果如下:
- 查看启动线程数最多的进程,案例中进程2346为NameNode进程,启动了5.4万线程,且持续增长。
- 多次打印对应进程的jstack日志,根据jstack日志信息发现,NameNode存在大量线程处于WAITING,且长期不释放。
结合以上问题分析如下:NameNode存在内置机制,根据WARN日志信息自动开启DEBUG日志,在环境中由于选择副本失败,导致一直启动Debug日志,不停地修改log4j,修改组件的log4j后进程会自动加载该配置文件,此时就会有新的线程自动产生,长时间后就会触发该告警。
出现这种情况时,将内置机制关闭,禁止自动修改日志级别即可恢复。
解决办法
- 分别登录到集群主备NameNode节点,执行以下命令备份脚本。
cd $BIGDATA_HOME/FusionInsight_Current/*_*_NameNode/install/hadoop/sbin
cp hdfs-namenode-period-check.sh /tmp
- 在主备NameNode节点编辑hdfs-namenode-period-check.sh文件。
vi hdfs-namenode-period-check.sh
在main方法中将“checkBlockplacementLog”注释掉,例如:
main() { Log $INFO "start period check" checkHaState checkDefaultFS checkAutoBalancer checkFsMonitorDirectory checkAutoMover checkAutoDatamove checkAutoNodeLabelrefresh checkJournalNodeSync checkCheckpoint checkCleanAcls checkSssdMonitor checkOperationCollecter checkMapReduceDistributedCache #checkBlockplacementLog checkAutoDiskBalancer }
- 保存文件后,登录Manager,选择“集群 > 服务 > HDFS > 实例”,勾选所有NameNode实例,选择“更多 > 重启实例”。