java线程dump可以使用jdk的命令“jstack  pid”完成,死锁检查可以用jconsole查看到。这两个工具是java调试的常用方法。

我遇到的问题是:在sles11sp3的服务上面测试,上面只有IBM J9 VM jre,默认没有装jdk,装了jdk后发现没有jstack命令,由于系统没有启动图形界面,jconsole也无法使用,最后安装了vnc server,在xterm里面打开jconsole才定位到问题。

于是我想做一个不依赖jdk,在J9 VM jre和oracle的 jre下都可以打印堆栈的工具。于是就有了下面的东西。

这个工具只能获取到当前JVM的堆栈,需要通过外围的接口输出,比如http server、web service等等。代码主要是从jconsole的源码里面弄出来的。输出的格式和jstack一致。

原理是使用ThreadMXBean获取线程栈信息,然后输出,

ThreadMXBean rtb = ManagementFactory.getThreadMXBean();....

里面的_.$是一个MessageFormater工具类方法,我使用的是org.slf4j.helpers.MessageFormatter,没有上传。

测试用例输出如下,可以看出t1和t2死锁了。

2014-09-04 15:08:57.565
Full thread dump Java HotSpot(TM) 64-Bit Server VM Sun Microsystems Inc. 20.45-b01deadlock #0:t1 - t2"t2" with id 10,state:BLOCKED on java.lang.Object@3ea981ca owned by t1 ,blocked:2,waited:0com.skybility.ha.cmm.common.trace.DeadLock1.method2(DeadLock1.java:22)- locked java.lang.Object@6d9efb05com.skybility.ha.cmm.common.trace.DeadLock1$Thread2.run(DeadLock1.java:50)"t1" with id 9,state:BLOCKED on java.lang.Object@6d9efb05 owned by t2 ,blocked:3,waited:0com.skybility.ha.cmm.common.trace.DeadLock1.method1(DeadLock1.java:12)- locked java.lang.Object@3ea981cacom.skybility.ha.cmm.common.trace.DeadLock1$Thread1.run(DeadLock1.java:36)"Attach Listener" with id 5,state: RUNNABLE,blocked:0,waited:0"Signal Dispatcher" with id 4,state: RUNNABLE,blocked:0,waited:0"Finalizer" with id 3,state:WAITING on java.lang.ref.ReferenceQueue$Lock@6a8814e9 ,blocked:0,waited:1java.lang.Object.wait(Native Method)java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:171)"Reference Handler" with id 2,state:WAITING on java.lang.ref.Reference$Lock@c1503a3 ,blocked:0,waited:1java.lang.Object.wait(Native Method)java.lang.Object.wait(Object.java:485)java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)"main" with id 1,state: RUNNABLE,blocked:0,waited:1sun.management.ThreadImpl.dumpThreads0(Native Method)sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:433)com.skybility.ha.cmm.common.ThreadDumper.dump(ThreadDumper.java:31)com.skybility.ha.cmm.common.trace.TestStackDump.main(TestStackDump.java:22)

转载于:https://www.cnblogs.com/cwjcsu/p/8433062.html

不依赖jstack的java 线程dump和死锁检查工具相关推荐

  1. 【jvm】jvm jstack使用 Java线程Dump分析

    1.概述 下面这个文章很好:调试排错 - Java线程Dump分析 常用jvm命令1 常用jvm命令1 常用jvm命令1

  2. Java线程dump分析及工具

    Java线程dump分析,可适用IBM的工具:IBM Thread and Monitor Dump Analyzer for Java 使用方法:java -jar jca*.jar.可加必要的VM ...

  3. Java 线程同步与死锁 学习笔记

    Java 线程同步与死锁 学习笔记 Java 线程同步与死锁 学习笔记 1 多线程共享数据 2 线程同步 3 同步准则 4 线程死锁 1. 多线程共享数据 在多线程操作中,多个线程可能同时处理同一个资 ...

  4. Java线程Dump分析

    Thread Dump介绍 什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能 ...

  5. java中线程死锁及避免_如何避免Java线程中的死锁?

    java中线程死锁及避免 如何避免Java中的死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题. 尽管问题看起来很基础,但是一旦您开始深入研究,大 ...

  6. 如何避免Java线程中的死锁?

    如何避免Java死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题. 尽管问题看起来很基础,但是一旦您开始深入研究,大多数Java开发人员就会陷入困 ...

  7. Java线程Dump分析工具--jstack

    参考:http://www.cnblogs.com/nexiyi/p/java_thread_jstack.html

  8. Java线程Dump分析-工具TDA

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  9. java线程中的死锁_Java多线程中的死锁 - Break易站

    Java 多线程 synchronized关键字用于使类或方法线程安全,这意味着只有一个线程可以锁定同步方法并使用它,其他线程必须等到锁定释放并且其中任何一个获得该锁定. 如果我们的程序在多线程环境中 ...

最新文章

  1. 显示SAP里所有的ICON(图标)的程序
  2. 记录Hibernate的缓存知识
  3. Xcodebuild自动打包
  4. 这个代码应该怎么写???
  5. 如何使用idea创建数据库表(源码)
  6. 蓝鸥iOS开发教程C语言——while语句
  7. SqlHelper 类
  8. linux工程常用的应用命令总结:
  9. 用C#打造QQ对战平台挤房器
  10. ROS 入门基础(三)创建 Subscriber
  11. 用html制作问卷调查
  12. linux pclint配置_PC-lint
  13. ng-alain中的st表格
  14. Wince 困难中前行 晚饭的时候可以看下夕阳
  15. mysql的四表联查_数据库四表联查
  16. Python实现世界人口地图
  17. c++打印心形_C语言控制台打印3D爱心图案
  18. Everything-文件查找工具
  19. pandas 中将某一列带有小数的数值转换成百分数
  20. 2018中国CRM软件趋势洞察报告(三)

热门文章

  1. 【ZJCPC2019 第16届 浙江省赛】The 16th Zhejiang Provincial Collegiate Programming Contest(GFHIJ 5题)
  2. 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数
  3. 【Vijos1180】选课
  4. java 访问器_网络之美 JavaScript中Get和Set访问器的实现代码
  5. 3d 模型换人脸_3D人脸模型月销量上千单 谁在打印,谁在帮打?
  6. 802.11的CSMA/CA机制
  7. 一些基础的MySQL数据库操作语句
  8. 牛客网暑期ACM多校训练营(第十场): H. Rikka with Ants(类欧几里得)
  9. Wannafly挑战赛27: D. 绿魔法师(莫比乌斯函数)
  10. python中 [::-1]的含义和用法