
# Ranger性能调优
Ranger作为MRS集群中的统一权限管理组件，负责为HDFS、HBase、Hive、Kafka、Yarn等组件提供统一的权限策略管理。随着集群规模扩大和使用Ranger鉴权的服务实例增多，RangerAdmin需要加载和管理的策略数量也随之增长，可能导致RangerAdmin JVM堆内存不足，出现策略下发延迟、鉴权请求超时、RangerAdmin服务OOM重启等问题。
本文适用于MRS集群管理员和运维工程师，当集群中使用Ranger鉴权的服务实例数量较多（如超过200个）或RangerAdmin出现内存不足症状时，通过调整RangerAdmin JVM内存参数来提升Ranger服务性能。
#### RangerAdmin内存调优原理
RangerAdmin是Ranger的核心管理组件，负责权限策略的创建、存储和分发。RangerAdmin启动时将所有权限策略从数据库加载到JVM堆内存中，各组件的Ranger Plugin定期从RangerAdmin拉取所属服务的最新策略缓存到本地，用于鉴权决策。
当使用Ranger鉴权的服务实例增多时，RangerAdmin需要同时处理的策略数量和Plugin拉取连接数增加，导致JVM堆内存消耗增大。如果堆内存不足，JVM将频繁触发Full GC，造成策略下发延迟和服务响应变慢；严重时触发OOM导致RangerAdmin服务崩溃重启，影响整个集群的鉴权功能。
通过调整RangerAdmin JVM的-Xms（初始堆内存）和-Xmx（最大堆内存）参数，可以为RangerAdmin分配足够的堆内存空间，避免频繁GC和OOM问题。
#### 内存参数配置
1. 登录集群Manager页面，选择"集群 \> 服务 \> Ranger \> 配置 \> 全部配置"，搜索RangerAdmin JVM的参数"GC_OPTS"，参数默认值为"-Dproc_rangeradmin -Xms2G -Xmx2G -XX:MaxDirectMemorySize=512M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=200M -XX:PermSize=64M -XX:MaxPermSize=512M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${RANGER_ADMIN_LOG_DIR}/gc-worker-%p-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=20M -verbose:gc -Djdk.tls.ephemeralDHKeySize=3072 -Djava.security.auth.login.config=#{conf_dir}/jaas.conf -Djava.security.krb5.conf=${KRB5_CONFIG} -Dbeetle.application.home.path=${BIGDATA_HOME}/common/runtime/security/config -Djna.tmpdir=${RANGER_TMP_HOME} -Djava.io.tmpdir=${RANGER_TMP_HOME} ${JAVA_STACK_PREFER} -Djdk.tls.rejectClientInitiatedRenegotiation=true"。 
   其中-Xms和-Xmx为核心堆内存参数，需要根据集群中Ranger服务实例数量进行调整：
   - -Xms：JVM初始堆内存大小。RangerAdmin启动时分配的堆内存，建议与-Xmx保持一致，避免运行时扩展堆内存带来性能波动。
   
   - -Xmx：JVM最大堆内存大小。RangerAdmin运行期间可使用的最大堆内存，决定了RangerAdmin能加载的策略数量上限。
   
   - -XX:MaxDirectMemorySize：JNIO直接内存最大值。RangerAdmin处理网络IO时使用的堆外内存。
   
   - -XX:MetaspaceSize：元空间初始大小。存储类元数据的内存区域初始阈值。
   
   - -XX:MaxMetaspaceSize：元空间最大值。存储类元数据的内存区域上限。\|
   
   
   
   

2. 统计当前集群中使用Ranger鉴权的服务实例数量。 
   使用Ranger的服务实例包括HDFS（NameNode）、Yarn（ResourceManager）、HBase（HMaster、RegionServer）、Hive(HiveServer)、Kafka（Broker）、HetuEngine（HSBroker）等。
   
   
3. 根据服务实例数量，参照下表修改GC_OPTS参数中的-Xms和-Xmx值。 
   
   | 使用Ranger实例数（个） | 参考值             |
   |:---|:---|
   | 200            | -Xms4G -Xmx4G   |
   | 400            | -Xms8G -Xmx8G   |
   | 600            | -Xms12G -Xmx12G |
      
   
   
4. 在Manager页面保存配置，并重启RangerAdmin服务使配置生效。 
   1. 重启完成后，选择"集群 \> 服务 \> Ranger"，查看RangerAdmin服务状态是否支持正常。
   
   2. 在Ranger WebUI界面查看策略列表是否正常加载，确认各组件Plugin能正常拉取策略。
   
   3. 观察RangerAdmin的相关监控指标是否正常，在合理范围内。
   
   
   
   
 
#### 常见问题
**Q：使用Ranger的服务实例数介于两档之间（如300个），应如何取值？**
A：建议向上取整。例如300个实例时，按400档配置-Xms8G -Xmx8G，预留一定内存余量，避免后续实例增加后频繁调整。
**Q：修改GC_OPTS参数后RangerAdmin无法启动怎么办？**
A：可能是配置的内存值超过了节点可用物理内存。请检查RangerAdmin所在节点的剩余内存是否大于配置值，必要时降低-Xms和-Xmx值或扩容节点内存。修改后重新保存配置并重启服务。如仍无法解决，请恢复默认值。
#### 相关文档
- 了解Ranger权限策略的配置方法，请参考[添加Ranger权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1851.html)。
- 如果需要查看Ranger的审计日志以排查权限问题，请参考[查看Ranger审计信息](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1852.html)。
- 如果RangerAdmin服务启动失败或运行异常，请参考[Ranger故障排除](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2493312.html)。
- 了解Ranger日志的存储路径和日志级别说明，请参考[Ranger日志介绍](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1865.html)。
 
