如何解决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>

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

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

相关文章

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

react17安装html-react-parser运行报错记录

背景 react17 安装 html-react-parser npm install html-react-parser运行终端报错信息 ERROR in ./node_modules/html-react-parser/esm/index.mjs 2:0-122 Cant reexport the named export htmlToDOM from non EcmaScript module (only default export is available)原因…

websocket初始化

websocket初始化 前言 上一集我们HTTP的ping操作就可以跑通了&#xff0c;那么我们还有一个协议---websocket&#xff0c;我们在这一集就要去完成我们websocket的初始化。 分析 我们在初始化websocket的之前&#xff0c;我们考虑一下&#xff0c;我们什么时候就要初始化我们…

JSON-RPC-CXX深度解析:C++中的远程调用利器

一、引言 1. JSON-RPC 简介及其在 C 开发中的重要性 JSON-RPC&#xff08;JavaScript Object Notation - Remote Procedure Call&#xff09;是一种基于 JSON 格式的远程过程调用协议。在 C 开发中&#xff0c;它扮演着至关重要的角色。随着软件系统的日益复杂和分布式架构的…

JavaEE 重要的API阅读

JavaEE API阅读 目的是为了应对学校考试&#xff0c;主要关注的是类的继承关系、抛出错误的类型、包名、包结构等等知识。此帖用于记录。 PageContext抽象类 包名及继承关系 继承自JspContext类。PageContext 实例提供对与某个 JSP 页⾯关联的所有名称空间的访问&#xff0…

Yocto项目 - VIRTUAL-RUNTIME,它有什么用?

Yocto 项目是一个完整的 Linux 分布构建工具集&#xff0c;提供了构建完全自定义小型核心或完整应用的能力。在这样一个构建系统中&#xff0c;VIRTUAL-RUNTIME这个概念是应用构建和选择处理中的重要部分。这篇文章将从概念、优势、应用场景和实战案例几个方面&#xff0c;全面…

基于微信小程序的乡村研学游平台设计与实现,LW+源码+讲解

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自…

深入探索 TypeScript:从基础到高级特性

深入探索 TypeScript&#xff1a;从基础到高级特性 一、引言 在现代软件开发领域&#xff0c;TypeScript 已经成为了一种极具影响力的编程语言。它基于 JavaScript&#xff0c;并为其添加了强大的静态类型系统&#xff0c;使得代码在开发阶段就能进行更严格的类型检查&#x…

【Qt】在 Qt Creator 中使用图片资源方法(含素材网站推荐)

先准备图片资源 推荐一个好用的图标素材网站&#xff0c;有很多免费资源。 Ic, fluent, animal, dog, filled icon - Free download 其他辅助工具&#xff0c;类似 AI 抠图去背景&#xff0c;实测效果还行&#xff0c;但是非免费。 美图秀秀-在线一键抠图&#xff0c;无需P…

linux虚拟机无法使用yum在线拉取

提示的具体消息如下 1. Contact the upstream for the repository and get them to fix the problem. 2. Reconfigure the baseurl/etc. for the repository, to point to a working upstream. This is most often useful if you are using a newer distribut…

CTFhub靶场RCE学习

靶场 eval执行 <?php if (isset($_REQUEST[cmd])) {eval($_REQUEST["cmd"]); } else {highlight_file(__FILE__); } ?> PHP代码显示&#xff0c;要求将命令赋值给cmd然后执行 先查看一下根目录文件 ?cmdsystem("ls");&#xff01;切记最后的分…

云计算研究实训室建设方案

一、引言 随着云计算技术的迅速发展和广泛应用&#xff0c;职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室&#xff0c;为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台&#xff0c;以促进云计算技术…

MQ集群

目录 MQ集群 集群分类 普通集群 集群结构和特征 集群的部署 获取cookie 准备集群配置 启动集群 镜像模式 镜像模式的特征 镜像模式的配置 exactly模式 仲裁队列 集群特征仲裁队列&#xff1a;仲裁队列是3.8版本以后才有的新功能&#xff0c;用来替代镜像队列&#…

UE5.2 C++ 实现拍照功能-带UI截图

整理了下&#xff0c;结合知乎上的一篇分享和自己的理解&#xff0c;最后总结出的一份带UI截图的代码&#xff0c;因为开发时间跨度有点大&#xff0c;中间有几天去玩游戏了&#xff0c;忘记之前参考的网页了&#xff0c;如果有知道的&#xff0c;欢迎留言补充。 头文件&#…

券商隔夜单自动下单交易接口

之前研究打板排板&#xff0c;研究怎么才能买得进去。 最近遇到几只利空跌停板&#xff0c;缩量跌停&#xff0c;明天大概率继续一字封板跌停。 如果卖不掉&#xff0c;意味着还要继续吃几个跌停&#xff0c;甚至ST票十几个跌停都有可能。 一次跌停亏几万&#xff0c;还是挺…

spi 回环

///tx 极性0 &#xff08;sclk信号线空闲时为低电平&#xff09; /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

基于物联网的温室大棚控制系统

本设计采用物联网方案&#xff0c;用STM32f103c8t6作为主控芯片&#xff0c;采用DHT11作为温湿度传感器&#xff0c;采集CO2使用JW01-CO2-V2.2传感器模块&#xff0c;并且通过BH1750传感器模块采集光照&#xff0c;通过土壤湿度传感器来获取大棚内部土壤湿度&#xff0c;ESP-01…

初级数据结构——栈

目录 前言一、栈的基本概念二、栈的实现方式三、栈的性能分析四、栈的应用场景五、栈的变体六、出栈入栈的动态图解七、代码模版八、总结结语 前言 数据结构栈&#xff08;Stack&#xff09;是一种线性的数据结构&#xff0c;它只允许在序列的一端&#xff08;称为栈顶&#x…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

OpenSSL 自签名

参考文档&#xff1a;unigui开发人员工作手册2021 参考文章&#xff1a;保姆级OpenSSL下载及安装教程-CSDN博客 下载 Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 进入后向下拉找到下载位置&#xff0c;建议下载二进制版本的精简版&#xff0c…