java 线程 假死_JVM假死问题如何定位?
一、问题描述
最近接手了一个系统,线上有个定时循环执行的Java服务端程序,采用Spring+Quartz每五分钟计算一次。计算采用多线程执行,所有线程执行完成则当次任务执行完成,并记录计算结果的时间。在程序运行过程中,发现JOB会出现卡死的情况。
二、问题分析
1、查看运行job服务的进程是否正常
计算任务没有正常执行,首先查看tomcat的进程是否正常;
使用ps、top命令可以很容易查看到进程运行情况、以及每个进程中线程的运行情况;
通过查询结果发现当前进程正常,而计算线程卡死了,此时猜测可能因为线程产生了死锁,那么接下来就要分析下进程中所有线程的状态。
2、使用ps或jps命令找到进程的PID
命令:ps -ef | grep tomcat
3、通过jstack命令dump线程堆栈信息
命令: jstack -l 10115 >> dumpFile
4、查看线程的堆栈信息快照
下载步骤3中dump的快照文件到本地,部分线程堆栈信息如下:
通过查看dump的快照并未发现有dead locked,排除了死锁的可能性。 多次dump线程快照,发现上面截图的线程一直处于RUNNABLE状态,分析打印出的信息发现处于I/O等待状态,通过线程堆栈信息可以定位到代码如下:
查看代码发现此处是通过httpClient调用第三方接口,使用的是httpClient4.1.3版本。经过分析得出如下结论:由于开发的同学在使用httpClient的时候没有设置超时时间,当网络或第三方服务出现问题没有response时,会一直等待,导致当前线程一直处于RUNNABLE的状态。
解决办法:设置httpClient的超时时间,重新上线,问题解决!
三、总结
由于线上tomcat启动时也没有配置JMX,因此无法使用jvisualvm图形化工具远程分析服务中进程情况;
个人认为在无图形化界面支持的情况,jstack工具是定位线上JAVA服务线程问题的神器。使用jstack可以dump出进程中所有线程(包括JVM自身的线程和用户线程)的堆栈信息、运行状态;
jstack一次dump出的快照可能不足矣发现问题,通常多次dump快照文件进行分析;
HttpClient4.X 版本使用时需要设置默认超时时间。HttpClient官方的示例也没提到要设置TimeOut,以至于很多同学在使用的时候也没有设置超时时间,这也是比较坑爹的地方。
以上问题定位步骤还可以应用于定位服务请求无响应的分析。以上问题定位步骤还可以应用于定位服务请求无响应的分析。
PS:希望对遇到此类问题的同学有帮助!
java 线程 假死_JVM假死问题如何定位?相关推荐
- java线程池深入讲解_死磕 java线程系列之线程池深入解析——生命周期
(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 上一章我们一起重温了下线程的 ...
- java程序假死_分析一个常见的java多线程通信问题(假死现象)
一件复杂的事,一个人如果不能做,两个人又做的不好,一群人就可能很好的解决了.对于线程来说也是,通过多个线程就能完成一个更复杂的功能,这就需要多个线程协作,协作就需要交流,但是交流总是会出问题的.在这篇 ...
- java面试线程必备知识点,怼死面试官,从我做起
转载自 java面试线程必备知识点,怼死面试官,从我做起 |--多线程一定好么? cpu密集不好 io密集好 |--如何减少上下文切换: 无锁并发(数据id根据Hash分段).CAS.最少线程 |-- ...
- 死磕 java线程系列之线程池深入解析——未来任务执行流程
(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了线程池中普 ...
- java任务流程_死磕 java线程系列之线程池深入解析——普通任务执行流程
(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了Java中 ...
- Java线程死亡(死掉、退出、挂掉)的几种情况
文章目录 1. Java线程死亡的几种情况 2. 验证上述结论 2.1 测试1:线程正常结束后,isAlive()返回False 2.2 测试2:子线程抛出异常之后,线程的isAlive()返回Fal ...
- 死磕java_死磕 java同步系列之AQS终篇(面试)
问题 (1)AQS的定位? (2)AQS的重要组成部分? (3)AQS运用的设计模式? (4)AQS的总体流程? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为 ...
- 死磕java_死磕 java同步系列之AQS起篇
问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Jav ...
- 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...
随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...
- java让电脑死机怎么办,win7系统Java活动脚本出错导致电脑死机的解决方法
win7系统使用久了,好多网友反馈说win7系统Java活动脚本出错导致电脑死机的问题,非常不方便.有什么办法可以永久解决win7系统Java活动脚本出错导致电脑死机的问题,面对win7系统Java活 ...
最新文章
- vs code编辑器
- Java颜色互换_java – 如何慢慢地将对象颜色从一个变为...
- session already invalidate
- OSI七层模型与TCP/IP四层模型
- java设计模式2--抽象工厂模式(Abstract Factory)
- windows下apk查看工具的原理
- fread和fwrite函数
- tcpreplay工具安装使用
- 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树
- gitee图床失效后处理
- Linux 内核经典面试题
- win7、win8手动安装AHCI驱动
- vue alexa:_免费下载:在任何PC上使用Alexa免提
- 推荐10个高效好用的办公软件,极大提升效率
- BZOJ 4807(車-高精度)
- 传统项目管理和敏捷项目管理的区别是什么?
- 条码打印三 - Zebra最全ZPL语言指令解析
- [印刷工艺]从正度纸,大度纸说起
- PDF如何转Word?用这两个方法轻松搞定
- 撸了个反代工具, 可用于激活JRebel