
# ResourceManager持续主备倒换
#### 问题
RM（ResourceManager）在多个任务（比如2000个任务）正常并发运行时出现持续的主备倒换，导致YARN服务不可用。
#### 回答
产生上述问题的原因是，full GC（GarbageCollection）时间过长，超出了RM与ZK（ZooKeeper）之间定期交互时长的阈值，导致RM与ZK失联，从而造成RM主备倒换。
在多任务情况下，RM需要保存多个任务的鉴权信息，并通过心跳传递给各个NM（NodeManager），即心跳Response。心跳Response的生命周期短，默认值为1s，一般可以在JVM minor GC时被回收，但在多任务的情况下，集群规模较大，比如5000节点，多个节点的心跳Response会占用大量内存，导致JVM在minor GC时无法完全回收，无法回收的内存持续累积，最终触发JVM的full GC。JVM的GC都是阻塞式的，即在GC过程中不执行任何作业，所以若full GC的时间过长，超出了RM与ZK之间定期交互时长的阈值，就会出现主备倒换。
登录FusionInsight Manager，选择"集群 \> 服务 \> Yarn \> 配置 \> 全部配置"，在左侧选择"Yarn \> 自定义"，在"yarn.yarn-site.customized.configs"中添加"yarn.resourcemanager.zk-timeout-ms"参数来增大RM与ZK之间定期交互时长的阈值（参数值的范围为小于等于90000毫秒），可以解决RM持续主备倒换的问题。
