jasypt组件死锁bug案例分享

事故描述

1、上午9.55发布了一个Apollo动态配置参数;

2、片刻后,服务器接口开始出现大量的超时告警,似乎是某资源被耗尽不足分配;

3、正值业务请求高峰的上午十点(平台上午10点会有一些活动会拉一波用户流量);

4、考虑是否是机器资源不足导致无法承载用户并发量,其实不是,还是跟Apollo发布配置有关;

5、进行服务器资源观测,发现14台机器只有1台机器线程数急剧飙升,并且出现了死锁线程(平台分析工具或jstack),超时告警也都集中出现在这一台机器上;

6、赶紧进行对应机器重启先解除故障

7、随后进行dubbo支持的离线jstack-log分析;

从dubbo源码可以看到AbortPolicyWithReport继承自AbortPolicy,AbortPolicy的默认行为是如果任务超过线程池的最大处理能力则直接拒绝任务并抛出异常。而AbortPolicyWithReport除了抛出异常外,还打印了一条非常详细的日志,该日志包含了线程池的详细配置,并且在用户的家目录下面导出了一个Dubbo_JStack.log文件。

原因分析

jasypt-spring-boot-starter是干嘛的?

Jasypt(Java Simplified Encryption)是一个用于Java应用程序的简单加密库,它提供了各种加密算法和解密工具。jasypt-spring-boot-starter是一个Spring Boot Starter,用于在Spring Boot应用程序中方便地集成Jasypt,以实现配置文件的加密和解密。在 Apollo 中添加配置项,将数据库密码进行加密保存。确保配置项的值以 ENC() 开头,表示它是一个加密过的值。例如,假设你的数据库密码是 password,加密后的值为 ENC(加密后的密码)

为什么会出现死锁现象?

CachingDelegateEncryptablePropertySource中getProperty方法中存在加锁操作(多把锁),且加锁的顺序不是一致的!

图1:

图2:

上图2中的source就是图1中的delegate

如上图,最终会在for循环中重新访问到:

com.ulisesbocchio.jasyptspringboot.caching.CachingDelegateEncryptablePropertySource#getProperty

简化后的加锁分析图如上图,因为加锁的目标是this:即CachingDelegateEncryptablePropertySource的实例对象,而这种实例对象又存在多个,就是代表有多把锁的存在。那么就会存在如上图所示的场景,如果apollo触发了更新,而此刻又有大量的线程在访问property资源,那么在极端情况下就会触发这个死锁现象!这也是14台机器只有一台出现死锁问题的原因。后面找了github,也确实是存在这个问题。

官方解释及如何解决

Issues · ulisesbocchio/jasypt-spring-boot · GitHub

加锁目标改用属性名称的字符串常量值,这样多线程并发访问某个name时,加锁的目标是固定的,锁也是同一把,不存在多把锁,这样就避免了死锁

解决:升级版本到3.0.4以上!

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

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

相关文章

HTML表单(详解网页表单如何实现)

目录 一、表单介绍 1.概念 二、表单用法 1.HTML表单 2.HTML 表单 - 输入元素 2.1.文本域(Text Fields) 2.2.密码字段 2.3.单选按钮(Radio Buttons) 2.4.复选框(Checkboxes) 2.5.提交按钮(Submit)…

人人都是开发者的时代,学编程还有用吗?

欢迎大家在 GitHub 上 Star 我们: 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

检查*.bib参考文献是否重复

安装bibtexparser pip install bibtexparser 代码 import bibtexparser from difflib import SequenceMatcherdef parse_bib_file(filename):with open(filename, r, encodingutf-8) as bibfile:bib_database bibtexparser.load(bibfile)return bib_database.entriesdef fi…

【电控笔记5.10】Luenberger估测器

Luenberger估测计 单积分器:pi控制器的补偿 双积分器:使用pid控制器的补偿 除了受控厂跟传感器,其他都在mcu 去掉Rs就是一个PLL锁相环 带宽比PLL更大

齐护K210系列教程(九)_## 播放音频文件wav

播放音频文件wav 播放音频只支持带喇叭的型号:AIstart_掌机、AIstart_Mini AIstart可以播放SD卡中的wav音频文件,在编写程序前请将文件准备好存放到SD卡内。 注:播放wav格式音频:wav格式的音频频率不能超过16KHZ。 1&#xff0…

ui生成代码详细教程

被askmanyai的图生代码技术秀到了!前端开发效率,提升到秒级 完全吊打了阿里的图生代码技术! 上传一张网站图片或者UI稿,然后用askmanyai生成实现这个网站的代码的教程来啦! 在askmanyai的中文网站上一分钟就能实现&…

simulink使用俩种方式封装(mask)画板/子系统的步骤

文章目录 创建子系统创建封装编制封装以参数控件方式封装以代码方式封装 添加约束效果 对封装概念不熟的可以看simulink封装概述,这是我简化的。我还是推荐看官方帮助文档 创建子系统 搭建一个简易的加法模型 ,创建子系统 创建封装 右键-》封装-》创建封…

spring @value @configurationProperties比较

今天项目中需要使用数组的方式 来加载一批 配置 yml: xxxx: - xxxxx - xsssss javaBean Value("${xxxxx.xxxxx}") private List<String> xxxs; 启动时候报错&#xff0c;无法加载&#xff0c;TM试验了1个小时&#xff0c;我一开始想到是格式的问题&#x…

VirtualFlow亮相核反应堆技术全国重点实验室2024学术年会

为加强先进核能技术领域科技创新与应用&#xff0c;核反应堆技术全国重点实验室及先进核能技术全国重点实验室2024年学术年会在四川成都启幕&#xff0c;9名院士和近百家科研院所、高校和企业等近700名专家学者齐聚一堂&#xff0c;聚焦和探讨核反应堆及先进核能重大基础理论和…

震惊!小红书矩阵账号管理-批量发布笔记

“小红书引流软件矩阵工具-笔记批量发” 昨天&#xff0c;有个粉丝急匆匆地来找我&#xff0c;一脸焦急地说&#xff1a;“大佬&#xff0c;我现在运营着好几个小红书账号&#xff0c;每天都要发布内容&#xff0c;可把我忙坏了&#xff0c;有没有什么高效的管理方法啊&#xf…

【学习笔记二十五】EWM PPF自动WT后台配置和前台展示

一、概述 SAP EWM(Extended Warehouse Management)模块中的PPF(Post Processing Framework)是一个用于执行通用功能和流程的工具。PPF为SAP EWM提供了一个统一的接口,用于触发各种动作,例如打印托盘标签、交货单、拣选票或发送消息和传真。这些动作在特定条件满足时生成,…

电力作业平台车必备:防倾倒预警装置,智能守护你的工作

引言 在电力作业中&#xff0c;平台车作为一种重要的高空作业设备&#xff0c;广泛应用于线路检修、设备维护等工作场景。然而&#xff0c;平台车在高空作业过程中存在的倾倒风险&#xff0c;一直是困扰作业人员的难题。为了有效预防此类事故的发生&#xff0c;防倾倒预警装置…

电子温度计不准需要怎么处理?

电子温度计不准需要怎么处理&#xff1f; 首选将温度计完全浸入温度为0℃左右的水中&#xff0c;使温度计指示值与0℃相等&#xff0c;拿出测量待测物的温度。其次将温度计完全浸入温度为100℃左右的水中&#xff0c;使温度计指示值与100℃相等&#xff0c;拿出测量待测物的温…

男生一般穿什么裤子好看?五大爆款男装精选测评!

男生裤子要怎么选才能找到适合自己的裤子呢&#xff1f;这肯定是大家选裤子时经常出现的一个疑问了&#xff0c;现在的市面上虽然款式风格非常多&#xff0c;但是由于品牌鱼龙混杂的原因&#xff0c;不同的裤子质量也参差不齐。为了帮助各位男同胞能选到适合自己的裤子&#xf…

抖音老阳讲的选品师项目普通人能赚钱吗?

随着互联网的快速发展&#xff0c;电商行业也迎来了前所未有的繁荣。在这个背景下&#xff0c;选品师这一职业逐渐走进人们的视野。老阳作为行业内的知名人士&#xff0c;经常分享选品师的经验和项目。那么&#xff0c;普通人能否参与老阳讲的选品师项目并且赚钱吗?答案是肯定…

为什么要写技术方案?

技术方案是为研究解决各类技术问题&#xff0c;有针对性&#xff0c;系统性的提出的方法、应对措施及相关对策。技术方案设计是一个技术开发者必备的能力&#xff0c;特别是对于高级、资深、架构师等角色。技术方案设计不仅能够帮助我们明确需求&#xff0c;规划架构&#xff0…

【计算机网络】MAC地址简介

MAC&#xff08;Medium Access Control&#xff09;&#xff0c;即媒介访问控制&#xff0c;是计算机网络通信中的重要概念。每个NIC&#xff08;Network Interface Card&#xff09;&#xff0c;即网络适配器&#xff0c;都具有独自且不变的MAC地址&#xff08;烧录的&#xf…

windows/linux 安装php的 sql server 扩展

Windowsphpstudyphp7.1 下载&#xff1a;ODBC、下载php 的sql server 扩展 路径&#xff1a;下载地址 版本&#xff1a;我的是7.1 对应的ODBC 是13&#xff0c;php 的sql server 扩展为4.3 安装&#xff1a;msodbcsql 直接安装、sqlsrv43 安装完把 扩展复制到php71 的扩展文…

今天我要和 javaScript 勾搭一下

今天阳光明媚&#xff0c;心情好好呀。&#x1f970; 文章目录 前言一、javaScript 是一门编程语言二、JavaScript 的重要性三、TypeScript 会取代 JavaScript 吗 &#xff1f;更多知识点继续看我的博客吧&#xff0c;最近在慢慢优化文章&#xff0c;耐心等待&#xff0c;嘿嘿。…

三丰云搭建QQ-bot的服务器python运行环境

网址&#xff1a;https://www.sanfengyun.com >> 三丰云免费云服务器 使用 点击Python项目管理器的小三角 新建新项目 按照下面的说明勾选和填写&#xff0c;点击确定即可 然后就可以开始运行代码了