【OceanBase诊断调优】—— 4013 内存爆问题的排查

本文介绍 4013 内存爆问题的排查。

内存爆的类型

内存爆主要分为五类,可以通过关键词 OOPS 确定内存爆的类型。

内存爆的类型日志信息(关键字为 [OOPS])
SINGLE_ALLOC_SIZE_OVERFLOWsingle alloc size large than 4G is not allowed(alloc_size: %ld)
CTX_HOLD_REACH_LIMITctx memory has reached the upper limit(ctx_name: %s, ctx_hold: %ld, ctx_limit: %ld, alloc_size: %ld)
TENANT_HOLD_REACH_LIMITtenant memory has reached the upper limit(tenant_id: %lu, tenant_hold: %ld, tenant_limit: %ld, alloc_size: %ld)
SERVER_HOLD_REACH_LIMITserver memory has reached the upper limit(server_hold: %ld, server_limit: %ld, alloc_size: %ld)
PHYSICAL_MEMORY_EXHAUSTphysical memory exhausted(os_total: %ld, os_available: %ld, server_hold: %ld, errno: %d, alloc_size: %ld)

可以在内存爆的时间点(比如 20230730142424792),搜索 OOPS 日志,确定属于哪个类型的内存爆。

grep '\[OOPS\]' observer.log.20230730142424792

租户内存爆

检查是否存在 msg 信息,表示特定租户的内存爆。

yu688-68uty67y-7gy7768-hu8ut9

此处 msg 表示 1008 租户的内存爆了,需要进一步查看该租户下哪个 CTX_ID 的占用偏高。

1.1 分析租户的内存元信息,确定高内存占用的 CTX_ID

  1. 分析租户的内存元信息,确定高内存占用的 CTX_ID

    通过关键词 malloc_allocator.*tenant: 1008 可以获取租户的内存元信息(limitholdcache_hold),-A 可以显示更多的内存元信息的细节,包括该租户下各 CTX 的内存占用,以及租户线程的 PM 信息。

    78yh60-ju6967uy-78yh5oi8-79u6o89

    上述内存元信息显示 DEFAULT_CTX_IDDEFAULT_CTX_IDRPC_CTX_ID 占用比较高,需要进一步分析这些 CTX_ID 下占用最高的几个内存模块。

  2. CTX 的内存元信息分析

    查找和分析 DEFAULT_CTX_IDDEFAULT_CTX_IDRPC_CTX_ID 的内存元信息。

    以 DEFAULT_CTX_ID 举例 。

    68u560-dre65tuy-67r9oi8-68y589

    通过关键词 1008 ctx_id= DEFAULT_CTX_ID 可以获取 1008 租户的 DEFAULT_CTX_ID 的内存元信息(holdusedlimit、内存碎片清理信息),-A 可以显示该 CTX_ID 的各内存模块的内存占用。发现疑似导致内存爆的模块后,找模块 owner 进行最后的确定。

    CTX_ID 的内存元信息中 used与 hold 相差很大。

    686hty-uiy73tuy-ju32i8-cw7989

    存在二种可能(内存碎片、MEMORY 日志统计延时),可以通过查看内存爆所在的多个时刻的 CTX_ID 的内存元信息确定。

    68hr0-78hg5uy-jky99oi8-6y8ho89

    • 内存碎片。

      内存爆触发内存碎片清理机制,washed_size 会显著变大,hold 会减小到与 used 差不多大。

    • MEMORY 日志统计延时。

      • washed_size 变化幅度很小,可能会出现 used 大于 hold 的现象。一般是由内存快速膨胀导致的,需要找到内存膨胀模块。

      • 在内存爆所在时间段,搜索 CTX_ID 的 used 明显比较大的 MEMORY 日志,跟前后时刻的 MEMORY 日志进行比对,内存占用增幅最大的模块很可能就是内存膨胀模块。

        0ry40-f25ds9iuy-546g9oi8-byr43t89

      • 如果找不到 used 较大的 MEMROY 日志,需要等待复现(用脚本定时打印该 CTX_ID 中占用最高的几个内存模块,并且输出 alloc_bytes 最大的堆栈。

    当无明显占用较大的内存模块的情况

    • 确定占用最高的几个内存模块是否有已知内存问题未修复。

    • 占用最高的几个内存模块,是否有陌生的模块。

    有明显占用较大的内存模块。

    直接锁定占用最高的内存模块。

  3. kvcache 内存异常。

未发现占用较大的 CTX_ID,并且租户的大部分内存都是 kvcache,说明租户内存不足时挤占 kvcache 的内存失败了,需要确定失败的原因。

  1. 搜索关键词 T1008.*tenant sync wash failed, cache memblock info,其中 ref_count 不为 2 表示这块内存被应用层 hold 住了,status 不为 2 表示这块内存正在被 cache 使用。如果存在 ref_count 和 status 都为 2 的内存,则说明存在 bug,需要存储方面的分析。

    57fq30-ug56asy-t6ewi8-g68s9

  2. 搜索关键词 tenant_id.*1008 cache memory info,发现 cache_size 占用最大的模块,找 owner 分析占用是否符合预期。

    gr5a8u0-gh789iuy-hu6sei8-5h0549

OBServer 内存爆

  • 一般是500租户超卖导致的,可以先获取 500 租户的内存元信息,按照 租户内存爆 这一节的步骤来确定导致 OBServer 内存爆的模块。

  • 搜索关键词 CHUNK_MGR,确定 OBServer 是否存在大量缓存,若存在大量缓存则可能是 OBServer 缓存未设上限,导致 OBServer hold 的内存接近 memory_limit,此时申请大于 4M 的内存会失败。可以通过设置配置项 memory_chunk_cache_size 释放缓存。

  • 500 租户的内存占用符合预期,查看全部业务租户的内存元信息。

    • 全部业务租户的总 limit 超过了 memory_limit - system_memory,很可能是租户扩缩容时存在 BUG,或者其他问题。

    • 全部业务租户的总 limit 符合预期,可能是业务租户的规格设置过大,可以适当调小快速恢复业务。

CTX_ID 内存爆

按照 CTX 的内存元信息分析 这一节的步骤来确定导致 OBServer 内存爆的模块。

物理内存耗尽

常见原因是超卖机器的物理内存,一台机器上部署多个 OBServer,或者 OBServer 的 memory_limit 接近机器的物理内存。可以结合 tsar --mem 在内存爆时刻的日志进行验证。

无 OOPS 日志

  • 通过 CHUNK_MGR 日志确定是否是 OBServer 内存爆,若是 OBServer 内存爆则按照 OBServer 内存爆 这一节来排查问题。

  • 通过全部租户的内存元信息确定是否是租户内存爆,若是,则按照 租户内存爆 这一节来排查问题。

适用版本

OceanBase 数据库所有版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/314161.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目使用百度地图

打开百度地图开放平台 百度地图开放平台 | 百度地图API SDK | 地图开发 在控制台新建应用 复制访问应用的ak 可修改地图样式 使用部分 <!-- 引入地图 --><div class"main-aside"><div id"b-map-container"></div></div> …

案例-部门管理-删除

黑马程序员JavaWeb开发教程 文章目录 一、查看页面原型二、查看接口文档三、开发1、Controller2、Service&#xff08;1&#xff09;service接口层&#xff08;3&#xff09;service实现层 3、Mapper4、Postman 一、查看页面原型 二、查看接口文档 三、开发 1、Controller 因…

SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶

缘起 公司有个服务做埋点收集的&#xff0c;可以参考我之前的文章埋点日志最终解决方案&#xff0c;今天突然发现有些数据日志可以输出&#xff0c;但是没法入库。 多出的双引号 查看Flink日志发现了JSON解析失败&#xff0c;Flink是从Kafka拿数据&#xff0c;Kafka本身不处…

Magnet for Mac:高效窗口管理工具

Magnet for Mac是一款专为Mac用户设计的窗口管理工具&#xff0c;旨在帮助用户更高效地管理和布局多个应用程序窗口&#xff0c;提升工作效率。 Magnet for Mac v2.14.0中文免激活版下载 这款软件拥有直观易用的界面和丰富的功能&#xff0c;支持用户将屏幕分割成多个区域&…

【漏洞分析】浅析android手游lua脚本的加密与解密(一)

主要用到的工具和环境&#xff1a; 1 win7系统一枚 2 quick-cocos2d-x的开发环境&#xff08;弄一个开发环境方便学习&#xff0c;而且大部分lua手游都是用的cocos2d-x框架&#xff0c;还有一个好处&#xff0c;可以查看源码关键函数中的特征字符串&#xff0c;然后在IDA定位到…

Electron中使用Prisma(以SQLite为例)

1、安装 Prisma 打开终端&#xff0c;执行以下命令安装 Prisma CLI&#xff1a; npm install prisma -g 2、初始化 Prisma 项目 在工作目录中执行以下命令来初始化一个新的 Prisma 项目&#xff1a; prisma init 这将创建一个新的文件夹&#xff0c;包含了必要的文件和目…

vue echarts折线图 折线堆积图和折线面积图

vue echarts折线图 折线堆积图和折线面积图 1、折线堆积图和折线面积图的结合&#xff1b; 上代码 <template><section><divid"performaceLineChart"ref"performaceLineChartRef"style"width: 100%; height: 500px"></d…

文旅IP孵化打造抖音宣传推广运营策划方案

【干货资料持续更新&#xff0c;以防走丢】 文旅IP孵化打造抖音宣传推广运营策划方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT可编辑&#xff08;完整资料包含以下内容&#xff09; 目录 文旅IP抖音运营方案 1. 项目背景与目标 - 背景&#xff1a…

ShardingSphere 5.x 系列【25】 数据分片原理之 SQL 解析

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 分片执行流程1.1 Simple Push Down1.2 SQL Federation2. SQL 解析2.1 解析…

【stomp 实战】Spring websocket使用详解和基本原理

spring框架对websocket有很好的支持&#xff0c;stomp协议作为websocket的子协议&#xff0c;Spring也做了很多封装&#xff0c;让我们在开发中易于使用。 学习使用Spring的Websocket模块&#xff0c;当然最好的办法就是看官网说明了。本篇文章对官网做一些简述和个人的理解。 …

Java设计模式 _结构型模式_适配器模式

一、适配器模式 **1、适配器模式&#xff08;Adapter Pattern&#xff09;**是一种结构型设计模式。适配器类用来作为两个不兼容的接口之间的桥梁&#xff0c;使得原本不兼容而不能一起工作的那些类可以一起工作。譬如&#xff1a;读卡器就是内存卡和笔记本之间的适配器。您将…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下&#xff1a; 报错第一时间想到可能是代码配置原因报错&#xff0c;查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错&#xff0c;后面查阅发现ico在各系统平台会不兼容&#xff0c;也就是ico是给win下使用的&#xff0c;此处改下图标格式就ok&am…

JavaScript-3(内置对象+数组对象+字符串对象)

目录 1.预解析 2.对象 什么是对象 创建对象的三种方法 利用字面量创建方法 利用new Object创建对象 构造函数创建对象 new关键字 遍历对象 3.内置对象 Math对象 Math概述 Math随机数 Date日期对象 格式化日期 Date总的时间毫秒 4.数组对象 创建数组的两种方式…

vue elementui el-table 表格里边展示四分位图

vue elementui el-table 表格里边展示四分位图 直接上代码&#xff08;效果图在文章末尾&#xff09;&#xff1a; 父组件&#xff1a; <template> <el-table size"small":header-cell-style"headerCellStyle()"style"width: 100%;"…

clickhouse与oracle传输数据

参考 https://github.com/ClickHouse/clickhouse-jdbc-bridge https://github.com/ClickHouse/clickhouse-jdbc-bridge/blob/master/docker/README.md clickhouse官方提供了一种方式&#xff0c;可以实现clickhouse与oracle之间传输数据&#xff0c;不仅仅是oracle&#xff0…

Qt下使用OpenCV截取图像并在QtableWidget表格上显示

文章目录 前言一、在QLabel上显示图片并绘制矩形框二、保存矩形框数据为CSV文件三、保存截取图像四、将截取图像填充到表格五、图形视图框架显示图像六、示例完整代码总结 前言 本文主要讲述了在Qt下使用OpenCV截取绘制的矩形框图像&#xff0c;并将矩形框数据保存为CSV文件&a…

Qt绘制边框有阴影兼容性问题

在Qt开发过程中&#xff0c;有时候我们要显示一个有阴影的对话框&#xff0c;这时一般采用自定义实现&#xff0c;然而最近在开发时软件时&#xff0c;Win11上显示正常&#xff0c;Win10或其他Win11电脑显示不正常&#xff0c;存在兼容性问题吗&#xff1f; 下面是具体的源码 …

PPSSPPSDL for Mac v1.17.1 PSP游戏模拟器(附500款游戏) 激活版

PPSSPPSDL for Mac是一款模拟器软件&#xff0c;它允许用户在Mac上运行PSP&#xff08;PlayStation Portable&#xff09;游戏。通过这款模拟器&#xff0c;用户可以体验到高清甚至更高的分辨率的游戏画面&#xff0c;同时还能够升级纹理以提升清晰度&#xff0c;并启用后处理着…

nvm下载的node没有npm

nvm下载的node没有npm 相信大家最近可能发现自己使用的nvm下载nodejs没有npm了。 会出现这种情况&#xff1a; C:\Users\89121>nvm install 15 Downloading node.js version 15.14.0 (64-bit)... Complete Downloading npm version 7.7.6... Download failed. Rolling Bac…

WebGL开发框架比较

WebGL开发框架提供了一套丰富的工具和API&#xff0c;使得在Web浏览器中创建和操作3D图形变得更加容易。以下是一些流行的WebGL开发框架及其各自的优缺点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Three.js 优点&#xff1a…