记一次springboot程序运行过程中假死(阻塞)问题

Springboot中开启多线程,实现异步非阻塞、异步阻塞、有无返回值的场景 开启多线程异步的方式有很多种,不单单局限以上方式,感兴趣的可以自行研究测试下,比如还可以使用来开启多线程,然后分别使用对应的execute()和submit()方法实现无返回值和有返回值的效果;以上内容均为个人理解,如存在不当欢迎提出改进。 阅读详情

今天在编码的时候,回到web项目的浏览器刷新网页,发现请求迟迟下不来,查看控制台才发现,项目日志输出动都不动一下的,查看windows任务管理器,好家伙,idea的cpu和内存占用率双双突破90%,初步怀疑是代码问题,于是进行springboot项目假死分析。

1、查看java进程的pid生成stack文件。

首先在任务管理器下查看到当前pid为11848,任务管理器没有pid展示的可以在左上角名称列右键,选中pid就行。
查看pid
然后根据这个pid,以管理员的身份在 C:\Windows\system32\ 文件夹下打开cmd窗口,输入以下命令得到stack文件。

jstack -l 11848 >c:/11848.stack

其中11848是刚查询到的pid,c:/11848.stack 是我将这个文件生成在c盘的根目录下并命名为11848.stack
在这里插入图片描述

2、使用Process Explorer分析properties

准备工具:Process Explorer
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

点击下载
点击此处下载

下载完成之后解压得到Process工具,打开procexp.exe,根据pid找到进程。
在这里插入图片描述
右键选择properties…
在这里插入图片描述
选择Threads之后以CPU排序找到占用最高的TID
在这里插入图片描述

3、根据TID分析stack文件

找到TID之后,我们要先转换一下TID,把它转成16进制。
在这里插入图片描述

然后我们拿 40CC 这个十六进制数,打开生成的stack文件,查询。
在这里插入图片描述
最后我们可以在查询出的TID下面看到哪里的代码有问题(由于我的问题已经解决,这里就不复现)。

4、总结

根据查询出来的信息,最终定位到了一个方法,方法里面有一个近乎无限循环调用导致程序假死,暂时注释这个方法,程序恢复正常。

springboot下,JedisPool getResource导致大量线程WAITING,服务假死 环境: springboot版本2.1.4.RELEASE、jedis连接池 服务配置: 设置了tomcat最大线程数为1000: server: port: 9090 tomcat: uri-encoding: utf-8 max-threads: 1000 jedis连接池配置: pool: max-active: 300 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1 # 连接池最大阻塞等待... 阅读详情

相关推荐

Spring Boot假死诊断实战记录

主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

SpringBoot线上服务假死、Tomcat假死原因分析、排查思路详解

最近发生过几次线上服务出现不能接收任何请求的情况,造成了较大的影响。该种情况一般称之为Tomcat假死,在发生的几次中进行排查也总结了一些经验。 为大家分享在排查此类问题的经验!

Java码农杂谈 7180

[华中科技计组实验]logisim完成单周期5级流水MIPS CPU

[华中科技计组实验]logisim完成单周期5级流水MIPS32 CPU hu~,终于完成了,真是费劲呐 支持24条指令,5级流水线,可以对分支指令处理,寄存器冲突处理,指令ROM为1K,数据RAM为1M,32位MIPS指令集CPU 但是… 大量使用比较器造成硬件开销巨大,测试一下发现这尼玛真是个老爷车还没单周期跑的快,自己电脑cpu占百分之八九十只能跑到20多赫兹,一个走马灯跑了半天,可优化空间太大了,写了那么多天造成这个破样,有点悲剧。。。 先放个图大伙参考就行了,要是有人想听思路的话接下来再更 .

zrc的博客 1万+

异常解决——SpringBoot项目启动卡住,无任何异常信息

项目场景: SpringBoot项目启动的时候Console控制台日志打印卡住,无任何异常信息打印 问题描述: 之前项目是好的,但是后面经人写了一部分代码之后,项目启动不了,SpringBoot项目启动时直接卡住,日志也不打印,也没有具体的异常信息,某位同事折腾一天。 原因分析: 之前我遇到过类似的问题。现在我把我所有的问题分析列在下面: 有可能是改动了pom.xml文件,项目没有彻底更新,导致引入的jar存在版本问题或者根本没有引入进来 项目是Debug模式启动,然后有一些特殊的断点导..

Thancks 3万+

NC65增加自定义参照并且参照数据要根据选择的财务组织过滤

1、首先定义一个参照类 package nc.pub.jzcm.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.ui.bd.ref.IRefDocEdit; import nc.ui.bd.ref.IRefMaintenanceHandler; public class PMPrPayDefaultRefModel extends AbstractRefModel { public PMPrPayDefaultRefModel(){ ...

xyl的博客 3494

Protobuf NDK以及QNX交叉编译

Protobuf 用处很广,尤其是通讯数据序列化,反序列化。TODO。

静虚待令,有物混成 1560

SpringBoot假死,分析与处理

3.针对排查的问题,锁定问题原因,进行针对性解决。再看一下pool-47-thread-4的堆栈信息, at ch.qos.logback.core.joran.spi.ConsoleTarget$1.write(ConsoleTarget.java:37),也就是说是logback没有释放锁,并且是console appender上。removeAbandonedTimeout 设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此 值后,druid将强制回收该连接,单位秒。

wuyangyang555的博客 3804

【机器学习】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

anaconda安装成功以后,jupyter notebook可以出现打开的路径,能够手动复制粘贴地址路径打开,却不能自动跳转到网页。解决的办法是在配置文件中加入指定的浏览器配置信息。

weixin_43416960的博客 4万+

线上SpringBoot 假死急救

线上SpringBoot 假死急救

安静的软件工程师 1878

药物重定位实战:如何用反向找靶技术挖掘老药新用(附Python代码示例)

本文详细介绍了药物重定位中的反向找靶技术,通过分子相似性计算、机器学习模型和结构对接等方法,挖掘已有药物的新治疗潜力。附Python代码示例,帮助读者快速实现从分子结构到潜在靶标的智能预测,显著提升药物研发效率。

weixin_28726671的博客 259

6、Cocos2D游戏开发:精灵添加与角色实现

本文详细介绍了在Cocos2D游戏开发中如何添加背景精灵和玩家角色精灵。通过创建GameScene场景、组织项目资源、使用多分辨率图像适配不同设备,并深入讲解了将角色拆分为上下半身以实现更真实瞄准效果的原理。文章还解析了Cocos2D的图像搜索机制、锚点概念及其应用,以及如何通过父子节点关系管理复合角色。最终实现了猎人角色在场景中的正确显示与定位,为后续动画和交互功能打下基础。

e3f4g5的博客 90

记一次Spring Boot应用中数据库连接阻塞问题排查过程

最近在项目开发过程中,发现一个Spring Boot服务在执行某个涉及数据库的操作时,程序线程会突然阻塞,不会继续执行,也没有明显的异常提示。经过详细排查,最终确定了问题根本原因是数据库连接未被正确释放导致连接池耗尽。以下是具体的排查过程与问题定位和解决方法。

常备不懈 1680

【模型实战】MiMo-VL-7B讲解与实战

维度成绩MMMU70.6(图像理解最难测试之一)VideoMME70.8(视频理解标杆)59.4(超越78B参数模型)56.1(超过专用GUI模型)Elo评分开源VLM排名第一(7B~72B)社区热度过去一个月下载超1,600次(RL+SFT)📌一句话概括MiMo-VL 是目前性能最强、推理最稳、体验最佳、生态最全的7B级开源视觉语言模型。

m0_47867638的博客 1198

JAVA面试题分享二百六十四:SpringBoot假死,怎么处理?

栈内存溢出:程序所要求的栈深度过大。堆内存溢出: 分清内存泄露还是 内存容量不足。泄露则看对象如何被 GC Root 引用,不足则通过调大-Xms,-Xmx参数。永久代溢出:Class对象未被释放,Class对象占用信息过多,有过多的Class对象。直接内存溢出:系统哪些地方会使用直接内存。给出一些实战经验,让工作中更加从容:调优参数务必加上,发生OOM让JVM自动dump出内存,方便后续分析问题解决问题堆内存不要设置的特别大,因为你设置的特别大,发生OOM时生成的dump文件就特别大,不好分析。

之乎者也·的博客 2685

面向企业架构师的 SAP BTP 全景实践:多云、账户、运行时与端到端开发路径

摘要:SAP BTP为企业提供多云、多运行时(Cloud Foundry/Kyma/ABAP Cloud)的数字化转型平台,支持快速构建扩展应用。关键选择包括:1)根据合规与性能选择区域;2)区分Trial(90天限制)与Free Tier(无期限)方案;3)按场景选择运行时(CF适合微服务/Kyma适合云原生/ABAP Cloud适合S/4HANA扩展)。建议优先使用Free Tier进行POC,并通过BTP Cockpit统一管理,实现从验证到生产的平滑过渡。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

记录一次springboot自动任务线上突然不执行问题排查过程

其实问题排查过程不是很复杂,只是我们项目要远程,并且服务器是win,连jdk自带的一些工具都没有,arthas在windowns上兼容性也不好,浪费了很多时间。 1、简述 首先,springboot的自动任务注解@EnableScheduling和@Scheduled底层原理是默认是单线程的,你也可以配置用自定义的线程池。所以,线上有自动任务突然不执行,肯定是有自动任务线程发生阻塞或者死锁,导致卡住了,其他自动任务都无法执行,对外呈现一个程序假死的情况。 首先简...

applehub的博客 3194

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

@scheduled 定时任务执行一段时间后莫名其妙停止 Ftp假死

之前遇到的一个问题记录一下,当时公司的项目线上运行了几个月遇到了这个问题。 1 出现问题 客户反馈说系统异常,赶紧通知运维同学发现一直获取不到数据。运维同学因为急于恢复,选择了重启服务。这也导致了我们前前后后用了一个月才解决这个问题。 我们通过日志排查问题,发现程序中几个定时任务,其中一个出现了问题,如下: 2019-10-08 21:55:06.021 |-INFO [taskPoo...

justin_bob的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringBoot服务假死案例

第一次访问时: 加锁 JvmController.class 线程睡眠模拟调用接口无响应(占用一个线程)通过jsatck pid >pid.txt 导出线程dump文件 可以看出线程锁主的详细信息。访问http://localhost:8080/test 可以正常访问。1.访问接口http://localhost:8080/lock。2.访问接口http://localhost:8080/lock。查看线程dump信息,可以发现线程在等待(等待第一个线程释放锁)curl 长时间不返回。

m0_58194302的博客 619

SpringBoot工程假死,如何揪出幕后真凶的?

SpringBoot工程假死,如何揪出幕后真凶的? 工作中经常会遇到程序不响应,但是进程依然存活的现象。原因有很多,比如 内存、CPU占满了(500,连接超时) 磁盘满了(500,连接超时) 今天笔者遇到的不是前两种,原因也很稀奇,tomcat线程池耗尽了,导致500连接超时。 我们是一个spring boot工程,对外提供rest接口服务,但是隔三差五的就会出现500连接超时的现象。 排除了内存、CPU、磁盘占满的case后,有个同事无意中发现这台机器出现了大量的网络连接CLOSE_WAIT。查询资料

Cmainlove的专栏 6581

SpringBoot线上假死紧急救援:架构师级排查与修复指南

根据多年实战经验,SpringBoot假死通常表现为:fill:#333;color:#333;color:#333;fill:none;SpringBoot假死客户端请求无响应业务日志停止输出进程存活但无业务处理前端显示pendingRPC调用超时日志文件无新内容进程存在但业务停滞根据多年实战经验,我总结了以下预防措施资源监控预警# 监控关键指标- CPU使用率 > 80%- 内存使用率 > 85%- 磁盘使用率 > 90%- 线程数 > 最大值的80%定期健康检查。

weixin_42079748的博客 1424

Spring Boot Admin健康检查引起的Spring Boot服务假死

最近在spring boot项目中引入了 spring-boot-starter-actuator 后,测试环境开始出现服务假死的现象,且这个问题十分怪异,只在多个微服务中的简称A的这个服务中出现,其他服务都没有出现这个问题,之所以说他是假死,是因为只是http请求无法访问进去了,但是该服务的定时任务却可以定时执行。

cainiao1412的博客 1564

记一次线程等待引起的bug解决过程

1. 记一次线程等待引起的bug解决过程 1.1. 问题 使用Springboot的Scheduled注解框架执行定时任务,发现线上突然不打任何日志了,我们要找到它不打日志的原因 1.2. 导出堆栈信息 我们使用的是阿里的k8s服务,其实哪里都一样,进到对应容器的里,导出堆栈信息 jps 或 top找到执行java程序的pid jstack -l pid > out.dump ...

tzxylao的博客 308

springTask阻塞问题

1.创建springBoot项目 2.启动类加入注解@EnableScheduling @SpringBootApplication @EnableScheduling public class application { public static void main(String[] args) { SpringApplication.run(application.class,args); } } 3.创建定时任务 @Component public class Te

QAQiiii的博客 2457

druid默认配置造成应用假死,请求超时,线程阻塞

默认druid配置导致应用假死

ainiguo的博客 661

springboot启动不打印日志信息_记一次SpringBoot项目启动卡住问题排查记录

作者:陈凯玲来源:https://my.oschina.net/keking/blog/3058921一个spring boot开发的项目,spring boot版本是1.5.7,携带的spring版本是4.1.3。开发反馈,突然在本地启动不起来了,表象特征就是在本地IDEA上运行时,进程卡住也不退出,应用启动时加载相关组件的日志也不输出。症状如下图:问题分析因为没有有用的日志信息,所以不能从日志...

weixin_39842955的博客 1741

再临SpringBoot——同步异步、阻塞非阻塞、NIO与Reactor模式

文章目录同步、异步、阻塞、非阻塞Proactor 与 Reactor 模式ReactorProactorNIO 同步、异步、阻塞、非阻塞 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步? 同步和异步是...

No_Game_No_Life_的博客 7307
上一篇: JAVA简单实现多线程的生产者和消费者模型
fazcube
博客等级 码龄6年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值