文档首页/ MapReduce服务 MRS/ 故障排除/ 使用HDFS/ NameNode节点存在ALM-12027主机PID使用率超过阈值告警
更新时间:2023-11-02 GMT+08:00

NameNode节点存在ALM-12027主机PID使用率超过阈值告警

问题背景与现象

3.1.2及之前的3.x版本集群,NameNode节点存在ALM-12027主机PID使用率超过阈值告警,节点Java进程可能出现“unable to create new native thread”报错。

原因分析

  1. 使用以下命令统计节点进程的线程数并排序。

    ps -efT | awk '{print $2}' |sort -n |uniq -c |sort -n

    执行后结果如下:

  2. 查看启动线程数最多的进程,案例中进程2346为NameNode进程,启动了5.4万线程,且持续增长。
  3. 多次打印对应进程的jstack日志,根据jstack日志信息发现,NameNode存在大量线程处于WAITING,且长期不释放。

结合以上问题分析如下:NameNode存在内置机制,根据WARN日志信息自动开启DEBUG日志,在环境中由于选择副本失败,导致一直启动Debug日志,不停的修改log4j,修改组件的log4j后进程会自动加载该配置文件,此时就会有新的线程自动产生,长时间后就会触发该告警。

出现这种情况时,将内置机制关闭,禁止自动修改日志级别即可恢复。

解决办法

  1. 分别登录到集群主备NameNode节点,执行以下命令备份脚本。

    cd $BIGDATA_HOME/FusionInsight_Current/*_*_NameNode/install/hadoop/sbin

    cp hdfs-namenode-period-check.sh /tmp

  2. 在主备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
    }

  3. 保存文件后,登录Manager,选择“集群 > 服务 > HDFS > 实例”,勾选所有NameNode实例,选择“更多 > 重启实例”。