不依赖jstack的java 线程dump和死锁检查工具
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和死锁检查工具相关推荐
- 【jvm】jvm jstack使用 Java线程Dump分析
1.概述 下面这个文章很好:调试排错 - Java线程Dump分析 常用jvm命令1 常用jvm命令1 常用jvm命令1
- Java线程dump分析及工具
Java线程dump分析,可适用IBM的工具:IBM Thread and Monitor Dump Analyzer for Java 使用方法:java -jar jca*.jar.可加必要的VM ...
- Java 线程同步与死锁 学习笔记
Java 线程同步与死锁 学习笔记 Java 线程同步与死锁 学习笔记 1 多线程共享数据 2 线程同步 3 同步准则 4 线程死锁 1. 多线程共享数据 在多线程操作中,多个线程可能同时处理同一个资 ...
- Java线程Dump分析
Thread Dump介绍 什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具.每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能 ...
- java中线程死锁及避免_如何避免Java线程中的死锁?
java中线程死锁及避免 如何避免Java中的死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题. 尽管问题看起来很基础,但是一旦您开始深入研究,大 ...
- 如何避免Java线程中的死锁?
如何避免Java死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题. 尽管问题看起来很基础,但是一旦您开始深入研究,大多数Java开发人员就会陷入困 ...
- Java线程Dump分析工具--jstack
参考:http://www.cnblogs.com/nexiyi/p/java_thread_jstack.html
- Java线程Dump分析-工具TDA
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- java线程中的死锁_Java多线程中的死锁 - Break易站
Java 多线程 synchronized关键字用于使类或方法线程安全,这意味着只有一个线程可以锁定同步方法并使用它,其他线程必须等到锁定释放并且其中任何一个获得该锁定. 如果我们的程序在多线程环境中 ...
最新文章
- 显示SAP里所有的ICON(图标)的程序
- 记录Hibernate的缓存知识
- Xcodebuild自动打包
- 这个代码应该怎么写???
- 如何使用idea创建数据库表(源码)
- 蓝鸥iOS开发教程C语言——while语句
- SqlHelper 类
- linux工程常用的应用命令总结:
- 用C#打造QQ对战平台挤房器
- ROS 入门基础(三)创建 Subscriber
- 用html制作问卷调查
- linux pclint配置_PC-lint
- ng-alain中的st表格
- Wince 困难中前行 晚饭的时候可以看下夕阳
- mysql的四表联查_数据库四表联查
- Python实现世界人口地图
- c++打印心形_C语言控制台打印3D爱心图案
- Everything-文件查找工具
- pandas 中将某一列带有小数的数值转换成百分数
- 2018中国CRM软件趋势洞察报告(三)
热门文章
- 【ZJCPC2019 第16届 浙江省赛】The 16th Zhejiang Provincial Collegiate Programming Contest(GFHIJ 5题)
- 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数
- 【Vijos1180】选课
- java 访问器_网络之美 JavaScript中Get和Set访问器的实现代码
- 3d 模型换人脸_3D人脸模型月销量上千单 谁在打印,谁在帮打?
- 802.11的CSMA/CA机制
- 一些基础的MySQL数据库操作语句
- 牛客网暑期ACM多校训练营(第十场): H. Rikka with Ants(类欧几里得)
- Wannafly挑战赛27: D. 绿魔法师(莫比乌斯函数)
- python中 [::-1]的含义和用法