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

海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流

💡 本系列文章是 DolphinScheduler 由浅入深的教程,涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。祝开卷有益。
大数据学习指南

大家好,我是小陶,DolphinScheduler 运行过程中会出现一些不可控的异常,可以使用 Arthas 轻松处理 JVM 中的对象,不需要重启服务。

Arthas 简单介绍

熟悉 arthas 的可以直接跳过,使用 artlas https://arthas.aliyun.com/
image.png

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

使用 arthas 操作内存对象

这里主要用到了 vmtool + ognl 。

Master服务一直在打印错误日志,如果不处理,会给磁盘压力…
image.png
查看源码发现,需要处理下图这里的 startProcessFailedMap,否则会一直重试。
截屏2023-07-03 17.04.52 (1).png

下面是使用 arthas 操作 JVM 的步骤:

①启动 arthas

java -jar arthas-boot.jar
image.png
输入序号,选择Master对应的进程,这里输入 2

② 查看 startProcessFailedMap 对象

查看 startProcessFailedMap,这里用到了 vmtool 这个命令

vmtool --action getInstances --className org.apache.dolphinscheduler.server.master.runner.MasterExecService --express 'instances[0].startProcessFailedMap'

输出:

@ConcurrentHashMap[
@Integer[837919]:@WorkflowExecuteThread[org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread@14a071bc],
@Integer[938003]:@WorkflowExecuteThread[org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread@14140a49],
]

拿着@Integer[837919]和@Integer[938003]中的数字 ID 去 MYSQL 搜一下是哪些工作流,再判断能否直接从内存中删除。

③ 删除失败的工作流

如果可以删除,继续操作,这里用到了ognl,想要了解更多的小伙伴可以看文末的参考文章。

vmtool --action getInstances --className org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService --express '#map=instances[0].startProcessFailedMap,#map.remove(837919),#map'vmtool --action getInstances --className org.apache.dolphinscheduler.server.master.runner.MasterSchedulerService --express '#map=instances[0].startProcessFailedMap,#map.remove(938003),#map'

此时,再查看

vmtool --action getInstances --className org.apache.dolphinscheduler.server.master.runner.MasterExecService --express 'instances[0].startProcessFailedMap'

输出:@ConcurrentHashMap[isEmpty=true;size=0]

错误日志没有了!

④ 数据库状态修改

最后,把数据库中这俩工作流的状态置为成功。(也就是无需处理。)

UPDATE t_ds_process_instance set state = 7 where id = xxxx

最后可以了。

Arthas 使用参考

https://www.cnblogs.com/qlqwjy/p/14269457.html

https://github.com/alibaba/arthas/issues/71


大数据学习指南
专注于大数据技术分享与交流。

相关文章:

  • AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
  • 【Android】安Android Studio环境搭建注意点
  • QT
  • 练习时长 1 年 2 个月的 Java 菜鸡练习生最近面经,期望25K
  • article:文章信息表
  • 和鲸101计划:以神经计算建模培训,助力北大学术人才培养
  • lspci总结
  • 【最新鸿蒙应开发】——HarmonyOS沙箱目录
  • 【Kafka】Kafka Producer 分区-05
  • Python 使用 Thick 方式连接 Oracle Database BaseDB 23ai
  • 前端将Markdown文本转换为富文本显示/编辑,并保存为word文件
  • vue 之 vuex
  • HTML(6)——表单
  • 重装了mysql,然后安装为服务时,net start 启动一直报错,MySQL服务无法启动的解决
  • Streamlit 与 Gradio:Python 仪表板的终极对决
  • 【刷算法】求1+2+3+...+n
  • C++入门教程(10):for 语句
  • ECS应用管理最佳实践
  • ReactNativeweexDeviceOne对比
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • tweak 支持第三方库
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何进阶一名有竞争力的程序员?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 通过几道题目学习二叉搜索树
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT(一种朴素的计算器实现方法)
  • #传输# #传输数据判断#
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)无线电失控保护(二)
  • (4)logging(日志模块)
  • (c语言)strcpy函数用法
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一) springboot详细介绍
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .gitignore
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .Net中间语言BeforeFieldInit
  • .stream().map与.stream().flatMap的使用
  • @Builder用法
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [20170705]diff比较执行结果的内容.txt
  • [AIGC] Spring Interceptor 拦截器详解
  • [Algorithm][动态规划][01背包问题][目标和][最后一块石头的重量Ⅱ]详细讲解
  • [Android Studio] 开发Java 程序
  • [BSGS算法]纯水斐波那契数列
  • [CF494C]Helping People
  • [DP 训练] Longest Run on a Snowboard, UVa 10285