observer 进程内存占用超出系统配置项 memory_limit 或 memory_limit_percentage 分配的额度后,会产生内存溢出的风险。本文介绍如何通过 BCC Memleak 捕获溢出内存申请。
适用版本
OceanBase 数据库所有版本
适用场景
observer 进程内存占用超出系统配置项 memory_limit 或 memory_limit_percentage 分配的额度后,产生内存溢出的风险,并且线上系统实施 Strace 及 Systemtap 存在 observer 进程吐核或集群挂起的风险。
前提条件
操作系统内核版本为 Linux 4.16 及以上版本。
通过 BCC Memleak 捕获溢出内存申请
在发生内存溢出的 OBServer 上安装 BCC Memleak 工具。
[root@hostname /]# yum install -y ./python3-netaddr-0.7.19-11.h3.eulerosv2r8.noarch.rpm ./bcc-0.7.0-1.eulerosv2r8.aarch64.rpm ./bcc-tools-0.7.0-1.eulerosv2r8.aarch64.rpm ./clang-7.0.0-2.h1.eulerosv2r8.aarch64.rpm ./clang-libs-7.0.0-2.h1.eulerosv2r8.aarch64.rpm ./compiler-rt-7.0.0-1.eulerosv2r8.aarch64.rpm ./libomp-7.0.0-1.eulerosv2r8.aarch64.rpm ./python3-bcc-0.7.0-1.eulerosv2r8.aarch64.rpm ./kernel-devel-4.19.36-vhulk1905.1.0.h276.eulerosv2r8.aarch64对 observer 进程进行采样,捕获溢出的内存申请。
其中
$pid表示 observer 进程的 PID,$interval表示捕获的时间间隔。[root@hostname /]# nohup /usr/share/bcc/tools/memleak -a -p $pid $interval > memleak_248196_5s.out 2>&1 &