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-b01 deadlock #0:t1 - t2 "t2" with id 10,state:BLOCKED on java.lang.Object@3ea981ca owned by t1 ,blocked:2,waited:0
com.skybility.ha.cmm.common.trace.DeadLock1.method2(DeadLock1.java:22)
- locked java.lang.Object@6d9efb05
com.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:0
com.skybility.ha.cmm.common.trace.DeadLock1.method1(DeadLock1.java:12)
- locked java.lang.Object@3ea981ca
com.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:1
java.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:1
java.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:1
sun.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)

不依赖jstack的java 线程dump和死锁检查工具的更多相关文章

  1. JAVA线程dump的分析

    Java 的线程 线程是指能独立于程序的其它部分运行的执行单元. JAVA语言能够很好的实现多线程的程序.我们在调试程序,或者在开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态 ...

  2. java线程dump分析工具

    jstack和线程dump分析  java程序性能分析之thread dump和heap dump 一.[内存dump] jmap –dump:live,format=b,file=heap.bin ...

  3. JVM探秘:jstack查看Java线程状态

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. jstack命令可以打印Java进程的各个线程堆栈跟踪信息,可以用来查看Java中各个 ...

  4. Java线程Dump分析工具--jstack【转载】

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

  5. Java线程Dump分析工具--jstack(转)

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

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

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

  7. 使用jstack和TDA进行java线程dump分析

    转载:http://blog.csdn.net/everlasting_188/article/details/51943095 1.jstack重点关注 命令行:jstack [-l][F] pid ...

  8. C2 CompilerThread0 如果抓到的java线程dump里占用CPU最高的线程是这个,99%可能是因为服务重启了

    "C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f20c80b3800 nid=0x57c0 runnable ...

  9. java 线程同步、死锁

    转载地址:速学堂 https://www.sxt.cn/Java_jQuery_in_action/eleven-thread-synchronization.html 什么是线程同步  同步问题的提 ...

随机推荐

  1. NOIP2017游记

    日常大考之前感冒(这次感冒了3周..) Day -4~Day 0 停课一周,不写作业不上课是很爽,然而想到NOIP结束第二天就要期中考.. 在学校刷刷题,跟着一大堆大佬的步伐,做着一大堆大佬的题目(其 ...

  2. c++(挑选最大的n个数)

    从一堆数据中挑选n个最大的数,这个问题是网上流传的比较广的几个问题之一.具体来说,它的意思就是:假设我们有100个数据,我们需要挑选出最大的n个数据(n < 100),那么有没有办法实现这样一个 ...

  3. [国嵌笔记][019][Eclipse集成开发环境]

    Eclipse集成开发环境的作用 可以编译程序,也可以对程序进行在线调试 集成开发环境 1.JLink连接开发板的JTAG 2.JLink连接PC的USB 3.eclipse软件 4.gdb serv ...

  4. 【centos6.5 hadoop2.7 _64位一键安装脚本】有问题加我Q直接问

    #!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-01-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...

  5. Linux apache的运行用户和用户组

    我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...

  6. Django权限机制的实现

    Django权限机制的实现 1. Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全和灵活:用好权限机制,能让系统更加强大和健壮.因此,基于Django的开发 ...

  7. H5+混合移动app应用开发——坑我太甚

    用了MUI之后,才发现,那坑比我想象之中的要多得多,有些是H5的坑,有些是plus的坑,接下来我一一来吐槽一番. IOS下面,上拉的时候,速度稍微快一点,表头自动隐藏,等你不拉的时候又自动显示 这种情 ...

  8. mysql根据汉字首字母排序[转]

    select  areaName  from area order by   convert(areaName USING gbk)   COLLATE   gbk_chinese_ci asc 说明 ...

  9. 找不到javax.servlet.Filter类,

    找不到javax.servlet.Filter类, 在构建的依赖包中缺少servlet.api

  10. 使用mui框架----移动端页面在所有屏幕下自适应

    写移动端怎么会不用到框架呢? 现在比较火的是mui.amaze UI 之类的,mui是现在最灵活轻便的一个框架,能够从pc到移动灵活的自适应, 只需要调用他定义的类名就能使用,非常方便,只是需要自己来 ...