• 首页 > 
  • 应急预案:专有云环境中盘古ChunkServer内存溢出的应急处理方法

应急预案:专有云环境中盘古ChunkServer内存溢出的应急处理方法

KB: 209275

 · 

更新时间:2021-03-25 13:55

1. 概述

本文主要介绍在专有云环境中,盘古ChunkServer内存溢出的应急处理方法。

1.1. 适用范围

  • 专有云V2,盘古
  • 专有云V3,盘古

1.2. 用户告知

  • 适用平台:x86
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:低
  • 预估执行时长:20分钟
  • 业务影响:否
    说明:修改CGroup内存限制,无需重启进程,但现场环境ChunkServer进程已经在不断重启,故不会有更坏的影响。
  • 风险等级:中
    说明:修改CGroup内存限制,无需重启进程,风险较低。

2. 问题描述

多台ChunkServer的状态为disconnected或者disconnecting,ChunkServer进程反复不断重启,Chunk数量超标,导致ChunkServer进程内存溢出(OOM),默认的内存大小限制是4GB或者8GB,超过限制会被CGroup结束进程,触发OOM。

说明:常出现在inner-ots,AnalyticDB集群。

ChunkServer内存溢出的现象如下:

admin用户在异常ChunkServer节点,执行以下命令,查看ChunkServer服务因内存溢出,被内核反复结束。

sudo grep -i killed /var/log/messages

3. 解决方案

3.1. 环境检查

如果项目中部署有Pangu Portal控制台,方案中部分操作可通过白屏操作。

白屏操作

  1. 登录Pangu Portal,登录地址如下所示。
    http://[$IP]:8620/
    说明:在专有云V2环境[$IP]为DMSAG的IP地址,在专有云V3环境[$IP]为OPS1的IP。
    系统显示类似如下。
    Image 1.png
  2. 单击集群右侧的详情,进入集群的Pangu Portal界面。
  3. 选择集群运维>Master运维,获取PRIMARYSECONDARY角色的信息。
  4. Master Sync Log区域,查看日志同步状态。

黑屏操作

  1. 登录集群AG服务器,确认/apsara/deploy/puadmin文件存在。
  2. 执行以下命令,获取PRIMARYSECONDARY角色信息,确认pangu服务正常。
    puadmin gems
    系统显示类似如下。
  3. 执行以下命令,获取pangu_master的日志同步状态,确认PrimaryCurrentLogId的值与WorkerSyncStatus中两个SyncedLogId的值一致。

    puadmin gss

    系统显示类似如下。

3.2. 实施步骤

白屏操作

适用于专有云V3环境

注意:专有云V3环境中,AnalyticDB集群请修改cgroup.json.jj2配置文件,非AnalyticDB集群请修改cgroup.json配置文件,以下操作以AnalyticDB集群为例。

编辑配置文件
  1. 持久化配置需重新Rolling,在修改配置前,请确认该集群已达终态。登录天基控制台,在Project框中搜索ads,单击AnalyticDB集群右侧的集群运维中心,确认该集群已达终态,且无运行中的任务。
  2. 单击集群右侧的集群配置文件
  3. 集群配置页面,单击services>pangu>template.conf,获取对应集群pangu服务使用的模板。
  4. 选择运维>服务运维,搜索pangu,单击服务右侧的管理
  5. 单击服务模板,模糊查询ads,选择目标模板,单击右侧的编辑
  6. 编辑服务模板基本信息提示框中,单击下一步,进入编辑服务模板文件列表页面,可能存在cgroup.json.jj2cgroup.json配置文件,请根据现场实际情况修改配置文件。
    注意:请注意JSON文件的格式,MemForPanguChunkserver的值请根据内存4GB对应200万Chunk的倍数调整,请联系阿里云技术支持进行确认。
    • 如果usr目录下cgroup配置文件为cgroup.json.jj2,修改MemForPanguChunkserver的value值。本示例将值由4*1024*1024*1024修改为12*1024*1024*1024
    • 如果usr目录下cgroup配置文件为cgroup.json,修改MemForPanguChunkserver的value值。本示例将值由4*1024*1024*1024修改为12*1024*1024*1024
  7. 修改完成后单击预览并提交
  8. 确认提交窗口,单击提交
批量使用模板
  1. 找到修改的服务模板,单击右侧更多>批量使用模板
    Image 4.png
  2. 批量应用模板升级窗口,将可选择服务实例区域的模板通过选择按钮移到已选服务实例区域。
    Image 5.png
  3. 单击已选服务实例右侧的预览,确认该模板为前面步骤所修改的内容。
  4. 单击配置对比,查看模板的差别符合预期。
  5. 预览后单击确定,然后单击预览并提交
  6. 弹出操作确认提示框,输入提示信息后,单击确认升级

  7. 选择任务>运行任务,查看Rolling任务状态,等待Rolling完毕。
适用于专有云V2环境
  1. 登录服务器,执行me命令,查看集群名称。
  2. 登录沉香控制台,选择对应的集群,单击pangu
  3. 单击编辑按钮,修改ChunkServerRole.MemoryLimit的值,将对应数值增大3倍,本示例中将4294967296改为12294967296
    说明:ChunkServerRole.MemoryLimit的值根据内存4GB对应200万Chunk的倍数调整,请联系阿里云技术支持进行确认。
  4. 提交修改的配置信息,并查看配置文件是否同步成功,如图所示即为同步成功。

黑屏操作

因某些特殊原因,沉香控制台或天基控制台不能正常访问,导致无法在沉香控制台或天基控制台修改配置参数,不能下发到对应的集群,此时为了解决ChunkServer内存溢出的问题,需要通过黑屏的方式调整ChunkServer CGroup配置。

注意

  • 升级CGroup时,请先调整memory.memsw.limit_in_bytes,后调整memory.limit_in_bytes
  • 回滚时,请先调整memory.limit_in_bytes ,后调整memory.memsw.limit_in_bytes
  1. 登录服务器,切换到admin用户,执行以下命令,查看操作系统版本。
    uname -r
    系统显示类似如下。
  2. 根据系统版本调整CGroup,具体操作如下:
    • 7U操作系统调整ChunkServer CGroup配置:
      1. 执行以下命令,查看pangu_chunkserver进程属于哪个CGroup组。
        cat /proc/`pidof pangu_chunkserver`/cgroup
        系统显示类似如下。
      2. 依次执行以下命令,在对应的目录查看初始值。
        cat /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver/memory.memsw.limit_in_bytes
        cat /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver/memory.limit_in_bytes
        系统显示类似如下。
      3. 执行以下命令,进入pangu_chunkserver进程对应CGroup组。
        cd /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver
      4. 依次执行以下命令,修改相关文件。
        echo 12884901888 >  memory.memsw.limit_in_bytes
        echo 12884901888 >  memory.limit_in_bytes
        说明
        • 单位为字节,以GB为单位的倍数调整,比如12*1024*1024*1024=12884901888
        • 相应的值根据内存4GB对应200万Chunk的倍数调整。
        • 2个配置文件调整的顺序如下。
          1. 先调整memory.memsw.limit_in_bytes配置文件。
          2. 后调整memory.limit_in_bytes配置文件。
        • 如有疑问,请联系阿里云技术支持进行确认。
    • 非7U操作系统调整ChunkServer CGroup配置:
      1. 执行以下命令,进入指定目录。
        cd /cgroup/apsara/pangu/chunkserver/
      2. 依次执行以下命令,查看对应的初始值。
        cat memory.memsw.limit_in_bytes
        cat memory.limit_in_bytes
      3. 执行以下命令,修改相关文件。
        echo 12884901888 > memory.memsw.limit_in_bytes
        echo 12884901888 > memory.limit_in_bytes

3.3. 结果验证

白屏操作

适用于专有云V3环境
  1. Rolling成功后,请登录天基控制台,在Project框中搜索ads,单击AnalyticDB集群右侧的集群配置文件
  2. 文件列表中,选择service>pangu>user,查看cgroup.json.jj2(只适用AnalyticDB集群)或cgroup.json配置文件中配置,确认已生效。
适用于专有云V2环境

登录沉香控制台,选择对应的集群,单击pangu,查看ChunkServerRole.MemoryLimit的值。

黑屏操作

  • 7U操作系统验证:
    登录服务器,切换到admin用户,依次执行以下命令,确认ChunkServer服务的CGroup调整已生效。
    cat /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver/memory.memsw.limit_in_bytes
    cat /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver/memory.limit_in_bytes
    系统显示类似如下。
  • 非7U操作系统验证:
    登录服务器,切换到admin用户,执行以下命令,确认ChunkServer服务的CGroup调整已生效。
    cgget /apsara/pangu/chunkserver  |egrep "memory.memsw.limit_in_bytes|memory.limit_in_bytes"
    系统显示类似如下。

4. 回滚方案

白屏操作

  • 专有云V3环境:回滚步骤和实施步骤相同,请参见实施步骤中的白屏操作,将修改的cgrpup.json.jj2或者cgroup.json配置文件恢复到原来的值,重新提交Rolling。
  • 专有云V2环境:登录沉香控制台,将ChunkServerRole.MemoryLimit的值改为原来对应的值。

黑屏操作

请参见实施步骤中的黑屏操作,调整为初始值,以7U系统为例。

  1. 登录服务器,切换为admin用户,执行以下命令,进入指定目录。
    cd /sys/fs/cgroup/memory/tianji.slice/tianji.service/apsara/pangu/chunkserver
  2. 依次执行以下命令,将ChunkServer服务的CGroup调整为初始值。
    echo 8589934592 > memory.limit_in_bytes
    echo 8589934592 > memory.memsw.limit_in_bytes
    系统显示类似如下。