一、问题描述

最近接手了一个系统,线上有个定时循环执行的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假死问题如何定位?相关推荐

  1. java线程池深入讲解_死磕 java线程系列之线程池深入解析——生命周期

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 上一章我们一起重温了下线程的 ...

  2. java程序假死_分析一个常见的java多线程通信问题(假死现象)

    一件复杂的事,一个人如果不能做,两个人又做的不好,一群人就可能很好的解决了.对于线程来说也是,通过多个线程就能完成一个更复杂的功能,这就需要多个线程协作,协作就需要交流,但是交流总是会出问题的.在这篇 ...

  3. java面试线程必备知识点,怼死面试官,从我做起

    转载自 java面试线程必备知识点,怼死面试官,从我做起 |--多线程一定好么? cpu密集不好 io密集好 |--如何减少上下文切换: 无锁并发(数据id根据Hash分段).CAS.最少线程 |-- ...

  4. 死磕 java线程系列之线程池深入解析——未来任务执行流程

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了线程池中普 ...

  5. java任务流程_死磕 java线程系列之线程池深入解析——普通任务执行流程

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 前面我们一起学习了Java中 ...

  6. Java线程死亡(死掉、退出、挂掉)的几种情况

    文章目录 1. Java线程死亡的几种情况 2. 验证上述结论 2.1 测试1:线程正常结束后,isAlive()返回False 2.2 测试2:子线程抛出异常之后,线程的isAlive()返回Fal ...

  7. 死磕java_死磕 java同步系列之AQS终篇(面试)

    问题 (1)AQS的定位? (2)AQS的重要组成部分? (3)AQS运用的设计模式? (4)AQS的总体流程? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为 ...

  8. 死磕java_死磕 java同步系列之AQS起篇

    问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Jav ...

  9. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...

    随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...

  10. java让电脑死机怎么办,win7系统Java活动脚本出错导致电脑死机的解决方法

    win7系统使用久了,好多网友反馈说win7系统Java活动脚本出错导致电脑死机的问题,非常不方便.有什么办法可以永久解决win7系统Java活动脚本出错导致电脑死机的问题,面对win7系统Java活 ...

最新文章

  1. vs code编辑器
  2. Java颜色互换_java – 如何慢慢地将对象颜色从一个变为...
  3. session already invalidate
  4. OSI七层模型与TCP/IP四层模型
  5. java设计模式2--抽象工厂模式(Abstract Factory)
  6. windows下apk查看工具的原理
  7. fread和fwrite函数
  8. tcpreplay工具安装使用
  9. 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树
  10. gitee图床失效后处理
  11. Linux 内核经典面试题
  12. win7、win8手动安装AHCI驱动
  13. vue alexa:_免费下载:在任何PC上使用Alexa免提
  14. 推荐10个高效好用的办公软件,极大提升效率
  15. BZOJ 4807(車-高精度)
  16. 传统项目管理和敏捷项目管理的区别是什么?
  17. 条码打印三 - Zebra最全ZPL语言指令解析
  18. [印刷工艺]从正度纸,大度纸说起
  19. PDF如何转Word?用这两个方法轻松搞定
  20. 撸了个反代工具, 可用于激活JRebel

热门文章

  1. 基于云开发的成语答题小程序
  2. windows功能_windows必备的系统功能增强2具,免费,简单,实用
  3. 计算机硬件系统的五大组成部分是什么,硬件系统的五大组成部分
  4. 统一社会信用代码、纳税人识别号验证规则
  5. PS冷知识:PS隐藏功能中的组合键
  6. android apr分析,APR分析-设计篇
  7. java mail 注册邮箱的实现
  8. HDU 5762 Teacher Bo (水题)
  9. 欧空局:SNAP and the Sentinel Toolboxes下载网址
  10. python排版_python排版