当前位置: 首页 > news >正文

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景

某保险机构客户的数据中台,自系统上线后不久,会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但,不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升,最终导致系统夯住而不可用的异常。

memory 利用率

cpu 利用率

数据不能更新已经影响下游业务处理,问题比较严重,我们紧急上线排查,分析发现客户应用是通过java程序调用shell脚本,再执行obloader命令,可能会同时出现多个任务并发导数据的情况。在并发导数据场景下,系统出现大量obloader 进程,应用java 程序夯住不可用,最终导致容器OOM重启,客户是不可接受的。

1679472298

1679472301

问题排查 

我们拿到客户的shell脚本和数据文件,在线下进行验证尝试复现,过程如下

  • 验证一:独立运行obloader工具
  • 现象:独立运行obloader工具没有发生夯住的现象,可以确认工具内部是可以正常工作的。

研发人员需要结合业务系统产生的数据格式决定如何使用obloader工具;在命令行参数中加上--trail-delimiter 导入业务数据,导入可以发现文件中存在大量脏数据。

  • 验证二:使用shell脚本运行obloader工具
  • 现象:摄影shell脚本运行obloader工具没有发生夯住的现象,但是导入速度比直接运行obloader 工具慢10多秒,同样可以排除obloader工具内部没有夯住的问题。

  • 验证三:提交多份文件,使用java程序运行obloader 工具
  • 现象:导入速度比直接运行obloader 工具慢1分钟,同时发现业务产生的数据文件中格式严重 不一致,有的行有29列,有的行有32列,数据无法正常导入,工具打印大量的错误日志,java 程序夯住。

解决方案

上述验证结论可以推测,控制台大量错误日志输出,导致java调用程序夯住,而通过shell窗口运行脚本或者工具,并未出现夯住的现象。为了进一步验证推测,我们再进行下一步的验证,将运行脚本中的命令产生的stderr/stdout重定向到指定文件中,避免向控制台输出。测试验证推理,至此问题原因定位,修复方案如下

1、上游业务检查推送的数据文件格式,避免出现格式不正确的脏数据问题。

2、java程序去到log4j2.xml配置中的<AppenderRef ref="ConsoleAppender" />,避免控制台打印大量错误日志。

3、并发限制,避免同时大量调用obloader导数据,避免cpu、memory 资源不足。

log4j2.xml配置文件修改

修改前
<Logger name="com.oceanbase.tools.loaddump" additivity="false" level="INFO">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="InfoRoutingAppender" />
<AppenderRef ref="WarnRoutingAppender" />
<AppenderRef ref="ErrorRoutingAppender" />
</Logger>去掉了 <AppenderRef ref="ConsoleAppender" />
修改后
<Logger name="com.oceanbase.tools.loaddump" additivity="false" level="INFO">
<AppenderRef ref="InfoRoutingAppender" />
<AppenderRef ref="WarnRoutingAppender" />
<AppenderRef ref="ErrorRoutingAppender" />
</Logger>

相关文章:

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景 某保险机构客户的数据中台&#xff0c;自系统上线后不久&#xff0c;会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但&#xff0c;不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升&#xff0c;最终导致系统夯住而不可用的异常。 memo…...

Git零基础到入门

一、开始工作区 clone: 克隆一个仓库到新的目录。 git clone https://github.com/username/repository.git init: 创建一个新的空 Git 仓库或重新初始化现有的仓库,新建git项目。 //创建项目两种方式 //一、本地项目自己创建项目&#xff0c;先创建好工作文件夹&#xff0c;通…...

HTTP 1.0、HTTP 1.1 和 HTTP 2.0 区别

HTTP 1.0、HTTP 1.1 和 HTTP 2.0 是超文本传输协议&#xff08;HTTP&#xff09;不同版本的规范&#xff0c;各自进行了多项更新和改进&#xff1a; 1. HTTP/1.0 单一请求-响应&#xff1a;每次请求都需要建立一个新的 TCP 连接&#xff0c;完成后立即断开。无状态连接&#…...

解决 ElSelect 数据量大导致加载速度慢

遇到一个性能相关的问题&#xff0c;使用 Element Plus 的 <ElSelect> 组件在数据量很大时&#xff0c;加载速度变慢。 下面简单分析下原因&#xff0c;并提供了一些解决方法。 1. 问题分析 1、大量 DOM 节点渲染 问题&#xff1a;当数据量非常大时&#xff0c;每一个…...

在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量

在 CentOS 系统中&#xff0c;您可以使用多种工具来查看网络速度和流量 在 CentOS 系统中&#xff0c;您可以使用多种工具来查看网络速度和流量1. 使用 iftop安装 iftop使用 iftop 2. 使用 nload安装 nload使用 nload 3. 使用 vnstat安装 vnstat初始化 vnstat查看流量 4. 使用 …...

分布式----Ceph部署

目录 一、存储基础 1.1 单机存储设备 1.2 单机存储的问题 1.3 商业存储解决方案 1.4 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 1.5 分布式存储的类型 二、Ceph 简介 三、Ceph 优势 四、Ceph 架构 五、Ceph 核心组件 #Pool中数据保存方式支持两种类型&…...

使用 PyTorch 实现 AlexNet 进行 MNIST 图像分类

AlexNet 是一种经典的深度学习模型&#xff0c;它在 2012 年的 ImageNet 图像分类比赛中大放异彩&#xff0c;彻底改变了计算机视觉领域的格局。AlexNet 的核心创新包括使用深度卷积神经网络&#xff08;CNN&#xff09;来处理图像&#xff0c;并采用了多个先进的技术如 ReLU 激…...

Python爬虫项目 | 一、网易云音乐热歌榜歌曲

文章目录 1.文章概要1.1 实现方法1.2 实现代码1.3 最终效果 2.具体讲解2.1 使用的Python库2.2 代码说明2.2.1 创建目录保存文件2.2.2 爬取网易云音乐热歌榜单歌曲 2.3 过程展示 3 总结 1.文章概要 学习Python爬虫知识&#xff0c;实现简单的一个小案例&#xff0c;网易云音乐热…...

【Linux】HTTP协议和HTTPS加密

文章目录 HTTP1、概念2、认识URL3、协议格式、请求方法和状态码4、HTTP请求和响应报头5、Cookie和Session HTTPS1、对称和非对称加密2、对称非对称加密安全分析3、证书 HTTP 1、概念 我们在应用层定制协议时&#xff0c;不建议直接发送结构体对象&#xff0c;因为在不同的环境…...

Linux编辑/etc/fstab文件不当,不使用快照;进入救援模式

目录 红帽镜像9救援模式 现象 解决 第一步&#xff1a;修改启动参数以进入救援模式 第二步&#xff1a;进入救援模式、获取root权限、编辑/etc/fstab文件 第三步&#xff1a;编辑好后在重启 下面是ai给的模板 红帽镜像9救援模式 编辑/etc/fstab不当时 17 /dev/nvme0n3p1…...

ubuntu升级postgres

已经有了postgres12&#xff0c;记录一下升级从postgres12升级到15的过程及遇到的一些问题&#xff0c;我没有备份&#xff0c;单纯升级 1、升级过程 深色版本 sudo systemctl stop postgresql 升级PostgreSQL 停止PostgreSQL服务&#xff1a; 停止当前版本的PostgreSQL服务…...

vue2在el-dialog打开的时候使该el-dialog中的某个输入框获得焦点方法总结

在 Vue 2 中&#xff0c;如果你想通过 ref 调用一个方法&#xff08;如 inputFocus&#xff09;来聚焦一个输入框&#xff0c;确保以下几点&#xff1a; 确保 ref 的设置正确&#xff1a;你需要确保在模板中正确设置了 ref&#xff0c;并且它指向了你想要操作的组件或 DOM 元素…...

SpringBoot(十七)创建多模块Springboot项目

在gitee上查找资料的时候,发现有不少Springboot项目里边都是嵌套了多个Springboot项目的。这个玩意好,在协作开发的时候,将项目分成多个模块,有多个团队协作开发,模块间定义标准化通信接口进行数据交互即可。 这个好这个。我之前创建的博客项目是单模块的SpringBoot项目,…...

Vue.js 高质量翻页功能的完整开发指南

文章目录 Vue.js 翻页组件的完整开发与优化指南前言分析分页需求与设计要点基础分页功能的实现分页逻辑 优化分页&#xff1a;封装为组件化设计组件化代码 提升用户体验与性能动态调整每页显示的条目数优化移动端与桌面端的展示高性能翻页策略&#xff1a;按需加载与懒加载提示…...

android dvr黑屏

问题现象&#xff1a;dvr拍摄的图片是黑的&#xff0c;没有buffer数据的。 查看相关的log文件发现&#xff1a; video surface 未释放导致 祥见一下报错信息&#xff1a; 38298 2024-10-16 01:02:51.855 4056 32068 W MediaCodecRenderer: java.lang.IllegalStateExcepti…...

css文字间距撑满横向距离

效果&#xff1a; 代码&#xff1a; 、 text-align:justify;text-align-last: justify;...

【Unity基础】对比OnCollisionEnter与OnTriggerEnter

在Unity中&#xff0c;OnCollisionEnter 和 OnTriggerEnter 是两种用于处理碰撞的回调函数&#xff0c;但它们的工作方式和使用场景有所不同&#xff1a; 1. OnCollisionEnter 触发条件&#xff1a;当一个带有 Collider 组件并且**未勾选“Is Trigger”**的物体&#xff0c;与…...

算法训练(leetcode)二刷第二十五天 | *134. 加油站、*135. 分发糖果、860. 柠檬水找零、*406. 根据身高重建队列

刷题记录 *134. 加油站*135. 分发糖果860. 柠檬水找零*406. 根据身高重建队列 *134. 加油站 leetcode题目地址 当前站点可以剩余油量gas[i] - cost[i]; 将每站的剩余油量求和计算累计剩余油量&#xff0c;总剩余油量小于0&#xff0c;则无法行驶一周。 若在到达某一站时累计剩…...

Springboot 整合 itext 实现PDF文件合并,识别图片则转成PDF拼接

目录 前言一、引用依赖二、使用步骤1.Controller2.Service接口3.实现类三、请求接口及结果前言 本文实现 Springboot 整合 itext 实现PDF文件合并,图片转PDF拼接。 一、引用依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-co…...

TypeScript 中的 ! 和 ? 操作符

在 TypeScript 中&#xff0c;! 和 ? 是两个非常重要且常用的操作符&#xff0c;分别用于非空断言和可选链操作。下面简单介绍一下二者。 1. 非空断言操作符 ! 1.1 含义 非空断言操作符 !&#xff08;Non-null assertion operator&#xff09;用来告诉 TypeScript 编译器&a…...

从原理到实践:Matlab相机标定参数详解与坐标变换全流程

1. 相机标定基础概念与Matlab工具箱实战 刚接触相机标定的朋友可能觉得那些参数看着就头疼&#xff0c;其实拆解开来并不复杂。我最早做机器人视觉项目时&#xff0c;也是被各种矩阵绕得晕头转向&#xff0c;直到自己动手标定了十几台工业相机才摸清门道。相机标定的本质就是建…...

免费领取《MapleSim卷材加工和卷绕系统建模仿真教程》

在薄膜、纸张、电池极片、电子材料等卷对卷加工中&#xff0c;你是否还在为张力波动、卷材打滑、收放卷不稳而头疼&#xff1f;物理样机调试成本高、风险大&#xff0c;单纯依靠经验难以解决复杂的动态耦合问题。 Maplesoft 中国技术团队近期发布了 MapleSim 卷材处理库&#…...

Pixel Dream Workshop实操手册:VAE Tiling开启前后显存占用与渲染质量对比

Pixel Dream Workshop实操手册&#xff1a;VAE Tiling开启前后显存占用与渲染质量对比 1. 引言 Pixel Dream Workshop&#xff08;像素幻梦创意工坊&#xff09;是一款基于FLUX.1-dev扩散模型的像素艺术生成工具。它采用了独特的16-bit像素风格界面设计&#xff0c;为创作者提…...

个人知识库自动化:OpenClaw+Qwen3-32B镜像实现资料智能归档

个人知识库自动化&#xff1a;OpenClawQwen3-32B镜像实现资料智能归档 1. 为什么需要自动化知识管理 作为一个长期被电子文档淹没的技术写作者&#xff0c;我的Downloads文件夹常年保持着2000文件的混乱状态。某次紧急查找会议纪要时&#xff0c;我花了47分钟才在"未命名…...

OpenClaw调试技巧:GLM-4.7-Flash任务执行日志分析与问题定位

OpenClaw调试技巧&#xff1a;GLM-4.7-Flash任务执行日志分析与问题定位 1. 为什么需要关注OpenClaw的调试日志 上周我在尝试用OpenClaw自动整理项目文档时&#xff0c;遇到了一个奇怪的现象&#xff1a;任务明明显示执行成功&#xff0c;但最终生成的Markdown文件却缺失了关…...

为什么每次招人,企业HR和管理者心里都没底?招错人会带来哪些严重后果?

这是众多企业面临的招聘痛点。根据行业数据&#xff0c;企业招错一名员工的平均成本高达该员工年薪的30%-150%&#xff0c;不仅造成直接经济损失&#xff0c;更会导致团队效率下降、管理成本增加、项目延期等一系列连锁反应。许多企业陷入"招聘-试用-不合适-再招聘"的…...

OpenClaw 采用分层解耦的架构设计,请详细说明其核心架构分层(至少 4 层)及各层的核心职责,并描述一条自然语言指令从输入到任务完成的完整执行闭环流程。

一、核心架构分层&#xff08;四层/五层模型&#xff09; OpenClaw 采用 分层解耦的模块化架构&#xff0c;主流技术文档将其划分为 四层核心架构&#xff0c;部分资料扩展为五层。以下是整合后的完整架构&#xff1a; 层级名称核心职责关键技术组件第一层交互接入层(Interfa…...

L1-083 谁能进图书馆,python解法

题目&#xff1a;为了保障安静的阅读环境&#xff0c;有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆&#xff0c;除非有 18 岁以上&#xff08;包括 18 岁&#xff09;的成人陪同”。现在有两位小/大朋友跑来问你&#xff0c;他们能不能进去&#xff1f;请…...

Llama-3.2V-11B-cot保姆级教学:模型卸载与多版本共存方案

Llama-3.2V-11B-cot保姆级教学&#xff1a;模型卸载与多版本共存方案 1. 项目背景与需求 Llama-3.2V-11B-cot作为一款基于Meta多模态大模型开发的高性能视觉推理工具&#xff0c;在双卡4090环境下表现出色。但在实际使用中&#xff0c;开发者经常面临以下痛点&#xff1a; 模…...

Halcon 标定(Calibration)与引导(Guidance)的工业实践:从理论到高精度落地的全链路解析

1. Halcon标定技术的基础认知 第一次接触Halcon标定时&#xff0c;我和很多新手一样被那些专业术语吓到了。但真正用起来才发现&#xff0c;这套系统就像给机器装上了"眼睛和尺子"。简单来说&#xff0c;标定就是教会相机看懂真实世界的尺寸和位置。想象一下&#xf…...