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

Apache Dolphinscheduler如何不重启解决Master服务死循环

个人建议

Apache Dolphinscheduler作为一个开源的调度平台,目前已经更新到了3.X版本,4.0版本也已经呼之欲出。3.0版本作为尝鲜版本,新添加了许多的功能,同时也存在非常多的隐患,本人使用3.0版本作为生产调度也踩了很多坑,到现在依然存在很多难以解决的问题,所以建议小伙伴们尽量使用2.x版本,相对稳定一些。

近期在跟社区的沟通中,最新3.2.0版本,该问题已经得到解决!感兴趣可以了解最新版本。

file

下面主要记录的是一个3.0比较难搞的问题,相信不少使用过3.0的用户都遇到过Master服务中存在一些工作流一直不停的死循环的问题,本人到现在也没找到触发的原因,但是通过与同事的摸索,暂时找到了一个可以借助Arthas解决死循环的方法。

死循环的影响

CPU飙高:每个工作流的运行在Master中都是一个线程,当这个线程一直没有结束时,是会占用CPU资源的,当服务中存在大量的线程死循环时,可想而知,服务器的资源压力有多大。

磁盘打满:循环的线程内存在日志打印,当大量的线程无时无刻在打印日志时,日志文件会迅速堆积,磁盘的大小是固定的,当磁盘使用率超过一定的阀值时,其他的程序也会因为磁盘可用空间不足而受影响。有些人设置了Logback等日志框架配置,限定了日志文件的总大小,但是这样也会引发日志快速覆盖问题,无法找到可用的日志。

数据库压力:每个循环里面都有相关的数据库查询操作,大量的查询会造成数据库压力短期内迅速增大,如果数据库性能不能很好的话,可能数据库就会先挂了。

解决思路

1.首先我们需要判断循环类型,是内存性死循环还是数据库性死循环,因为内存性死循环,我们大部分可以通过修改数据库来解决,但是内存性死循环,我们就必须借助某些工具,去内存中修改。

2.通过日志查看,循环代码,并找到循环数据的来源。

file

3.通过查看日志,发现每次出现循环时都会出现“Start workflow error”、"Failed to submit the workflow instance"报错,当工作流出现问题时,程序会将工作流事件重新放回到执行队列中,等待下次执行,这样就变成了无限循环报错。

4.通过“Failed to submit the workflow instance”,我们在项目里全局搜索,查看报错的逻辑是什么,是如何将报错的工作流处理事件重新添加到处理队列中的。

file

file

5.从上面被红框圈出来的关键处代理,我们可以梳理出一个基本的master服务处理工作流的一个事件流程,工作流的线程类(WorkflowExecuteRunnable)被放到缓存中,缓存的key是工作流实例的ID,同时每一个工作流都有对应的事件,事件中存储工作流实例的ID,每次执行事件时都会从缓存中获取线程类,当线程类执行失败时便重新创建一个事件加入事件队列中执行,依次往复,除非缓存中的数据被清除了,才会结束循环。具体流程如下图:

file

通过清理内存中的工作流线程即可解决循环问题。

三、实际操作

1.进入Master服务的日志目录

2.通过日志查找所有在循环中的工作流实例的id

3.

grep WorkflowInstance  dolphinscheduler-master.log|grep "Start workflow error" |awk -F 'WorkflowInstance-' '{print $2}'| awk -F']' '{print $1}' |sort |uniq

4.安装Arthas,启动Arthas,选择API-Server服务,先使用API服务物理删除循环的工作流实例相关的数据库数据,防止下次重启后依然循环。

5.在Arthas中调用下面的方法

6.

ognl  '@org.apache.dolphinscheduler.service.bean.SpringApplicationContext@applicationContext.getBean("processServiceImpl").deleteWorkProcessInstanceById("工作流实例id")'
ognl  '@org.apache.dolphinscheduler.service.bean.SpringApplicationContext@applicationContext.getBean("processServiceImpl").deleteAllSubWorkProcessByParentId("工作流实例id")'
ognl  '@org.apache.dolphinscheduler.service.bean.SpringApplicationContext@applicationContext.getBean("processServiceImpl").deleteWorkProcessMapByParentId("工作流实例id")'
ognl  '@org.apache.dolphinscheduler.service.bean.SpringApplicati
onContext@applicationContext.getBean("processServiceImpl").deleteWorkTaskInstanceByProcessInstanceId("工作流实例id")'

file

7.ognl表达式参考这个链接 https://arthas.aliyun.com/doc/ognl.html

8.通过Arthas进入master-server 调用ognl清除工作流缓存

ognl  '@org.apache.dolphinscheduler.service.bean.SpringApplicationContext@applicationContext.getBean("processInstanceExecCacheManagerImpl").removeByProcessInstanceId("工作流实例id")'

本文由 白鲸开源科技 提供发布支持!

相关文章:

Apache Dolphinscheduler如何不重启解决Master服务死循环

个人建议 Apache Dolphinscheduler作为一个开源的调度平台,目前已经更新到了3.X版本,4.0版本也已经呼之欲出。3.0版本作为尝鲜版本,新添加了许多的功能,同时也存在非常多的隐患,本人使用3.0版本作为生产调度也踩了很多…...

绝对好用!一个浏览器插件解决跨设备同步问题,吊打文件传输助手!

在数字化的时代,我们所接触的信息呈现指数级的增长。无论是办公资料、学习资源,还是各种生活中的点滴,所有这些信息以各种形式——文本、图片、视频、音乐等——出现在我们面前,如何有效地同步和管理这些内容成为一个挑战。 就跨…...

阿昌教你如何优雅的数据脱敏

阿昌教你如何优雅的数据脱敏 Hi,我是阿昌,最近有一个数据脱敏的需求,要求用户可自定义配置数据权限,并对某种类型数据进行脱敏返回给前端 一、涉及知识点 SpringMVCJava反射Java自定义注解Java枚举 二、方案选择 1、需求要求…...

力扣每日一题80:删除有序数组中的重复项||

题目描述: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…...

SQL——插入已经存在的数据

现在有一套ID为9003的高难度SQL试卷,时长为一个半小时,请你将 2021-01-01 00:00:00 作为发布时间插入到试题信息表examination_info(其表结构如下图),不管该ID试卷是否存在,都要插入成功,请尝试…...

【网络安全 --- 任意文件上传漏洞靶场闯关 6-15关】任意文件上传漏洞靶场闯关,让你更深入了解文件上传漏洞以及绕过方式方法,思路技巧

一,工具资源下载 百度网盘资源下载链接地址: 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan…...

阿里云2核2G3M云服务器99元/年,新老同享,续费不涨价!

2023年阿里云双11活动正在火热进行中,推出了一款面向个人开发者、学生、小微企业的年度爆款套餐,2核2G3M云服务器99元/年,新老同享,续费不涨价! 一、活动入口 活动地址:传送门>>> 二、活动详情 …...

UWB 技术在机器人和移动领域的应用题】

多年来,机器人生态系统不断增长,不同的应用程序也在不断增长。如今,机器人出现在许多不同的领域,例如私人家庭、商业场所、仓库和医疗场所。他们要么自主工作,要么与我们并肩工作,帮助我们完成任务。 根据…...

11.1 知识总结(JavaScript)

一、 ECMAScript的历史 年份 名称 描述 1997 ECMAScript 1 第一个版本 1998 ECMAScript 2 版本变更 1999 ECMAScript 3 添加正则表达式 添加try/catch ECMAScript 4 没有发布 2009 ECMAScript 5 添加"strict mode"严格模式 添加JSON支持 2011 EC…...

【Java 进阶篇】Java Web开发:实现验证码功能

在Web应用程序中,验证码(CAPTCHA)是一种常见的安全工具,用于验证用户是否为人类而不是机器。验证码通常以图像形式呈现,要求用户在登录或注册时输入正确的字符。在这篇文章中,我们将详细介绍如何在Java Web…...

C++启动线程的方法

&#xff08;1&#xff09;函数指针 情况一&#xff1a;主线程有join&#xff0c;正常执行 #include <thread> #include <iostream>void work(int num) {while(num-- > 0) {std::cout << num << std::endl;} }int main() {std::thread t(work, 5);…...

Distilling the Knowledge in a Neural Network学习笔记

1.主要内容是什么&#xff1a; 这篇论文介绍了一种有效的知识迁移方法——蒸馏&#xff0c;可以将大型模型中的知识转移到小型模型中&#xff0c;从而提高小型模型的性能。这种方法在实际应用中具有广泛的潜力&#xff0c;并且可以应用于各种不同的任务和领域。 论文中首先介绍…...

JVM虚拟机:垃圾回收算法和垃圾回收器之间的关系

GC垃圾回收算法 在前面的课程中我们学习了GC垃圾回收算法,分别为: 引用回收算法 复制算法 标记清除算法 标记整理算法 这些垃圾回收算法是理论,有多种垃圾回收器可以实现这些理论。目前为止没有最完美的垃圾回收器,只能针对具体的情况选择最合适的垃圾回收器,进行分代收集…...

oracle sqlplus的使用 ,查询oracle实例名和服务名,查询oracle容器,切换oracle容器

Oracle的sqlplus是与oracle数据库进行交互的客户端工具&#xff08;oracle数据库自带的客户端工具&#xff09;&#xff0c;借助sqlplus可以查看、修改数据库记录。在sqlplus中&#xff0c;可以运行sql*plus命令与sql语句。 1。先使用root账户登陆系统后&#xff0c;使用su - o…...

golang工程——opentelemetry简介、架构、概念、追踪原理

opentelemetry 简介 OpenTelemetry&#xff0c;简称OTel&#xff0c;是一个与供应商无关的开源可观测性框架&#xff0c;用于检测、生成、收集和导出 遥测数据&#xff0c;如轨迹、度量、日志。OTel的目标是提供一套标准化的供应商无关SDK、API和工具&#xff0c;用于接 收、…...

Python 自动化(十六)静态文件处理

准备工作 将不同day下的代码分目录管理&#xff0c;方便后续复习查阅 (testenv) [rootlocalhost projects]# ls day01 day02 (testenv) [rootlocalhost projects]# mkdir day03 (testenv) [rootlocalhost projects]# cd day03 (testenv) [rootlocalhost day03]# django-admi…...

C#学习系列之密闭类、接口、结构和类

C#学习系列之密闭类、接口、结构和类 啰嗦密闭类接口结构和类总结 啰嗦 基础学习 密闭类 类似string这种不想再继续继承和修改下去&#xff0c;使用sealed声明。 派生类中用sealed和override&#xff0c;无法继续重写。 接口 接口就是指定一组函数成员&#xff0c;而不实现…...

C++特殊类的设计

文章目录 设计一个类不能被拷贝请设计一个类&#xff0c;只能在堆上创建对象设计一个类只能在栈上去创建对象设计一个类不能被继承设计一个类&#xff0c;只能创建一个对象(单例模式)饿汉模式懒汉模式 单例模式总结饿汉模式懒汉模式 设计一个类不能被拷贝 拷贝一个类对象可以有…...

量化交易Copula建模应对市场低迷

一、简介 传统上,我们依靠相关矩阵来理解资产间的动态。然而,正如过去的市场崩盘所表明的那样,当风暴袭来时,许多模型都会陷入混乱。突然之间,相关性似乎趋于一致,而多样化这一经常被吹捧的风险管理口号似乎并没有提供什么庇护。 这种出乎意料的同步,即资产在经济低迷时…...

美创科技位居IDC MarketScape:中国数据安全管理平台市场「领导者」类别

近日&#xff0c;IDC发布《IDC MarketScape: 中国数据安全管理平台2023年厂商评估》 报告&#xff0c;报告从交付、产品特性、创新能力、研发速度、客户满意度等多个维度对国内厂商进行全面评估。美创科技列为『领导者』类别&#xff01; ◼︎ 报告中&#xff0c;从关键战略指…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...