
# 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**
   执行后结果如下：
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0000001433715513.png)
   
2. 查看启动线程数最多的进程，案例中进程2346为NameNode进程，启动了5.4万线程，且持续增长。
3. 多次打印对应进程的jstack日志，根据jstack日志信息发现，NameNode存在大量线程处于WAITING，且长期不释放。 ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0000001433795793.png "点击放大")
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0000001433596329.png "点击放大")
   
结合以上问题分析如下：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实例，选择"更多 \> 重启实例"。
 
