jstack和线程dump分析

简介:

jstack和线程dump分析


jstack定义:


jstackjava虚拟机自带的一种堆栈跟踪工具。


基本介绍:


jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源

命令格式:


jstack [ option ] pid
基本参数:
-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m 打印java和native c/c++框架的所有栈信息. -h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps工具查询

案例


C:\Users\Administrator>jstack  5516
2015-12-21 16:10:53
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):

"DestroyJavaVM" prio=6 tid=0x000000000027d800 nid=0x1bb0 waiting on condition [0
x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-1" prio=6 tid=0x000000000cb13800 nid=0x19ac waiting for monitor entry [0
x000000000d67f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at thread.DeadLockDemo$2.run(DeadLockDemo.java:35)
        - waiting to lock <0x00000007d5a9be88> (a java.lang.String)
        - locked <0x00000007d5a9beb8> (a java.lang.String)
        at java.lang.Thread.run(Unknown Source)

"Thread-0" prio=6 tid=0x000000000cb0e800 nid=0x6bc waiting for monitor entry [0x
000000000d48f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at thread.DeadLockDemo$1.run(DeadLockDemo.java:21)
        - waiting to lock <0x00000007d5a9beb8> (a java.lang.String)
        - locked <0x00000007d5a9be88> (a java.lang.String)
        at java.lang.Thread.run(Unknown Source)
这里运行了一段死锁code,导致程序中的两个线程都在等待对方释放锁,造成程序死锁。

从这段代码中可以明确的看出是 DeadLockDemo.class 中的第35行,和21行出现了阻塞,然后就是要优化这个函数了。

PS : 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。 


推荐文章:http://www.cnblogs.com/nexiyi/p/java_thread_jstack.html

推荐文章:http://blog.sina.com.cn/s/blog_855eab95010157uv.html















相关文章
|
1月前
|
Linux
一个进程最多可以创建多少个线程基本分析
一个进程最多可以创建多少个线程基本分析
38 1
|
3月前
|
监控 Linux 编译器
多线程死锁检测的分析与实现(linux c)-有向图的应用
在日常的软件开发中,多线程是不可避免的,使用多线程中的一大问题就是线程对锁的不合理使用造成的死锁,死锁一旦发生,将导致多线程程序响应时间长,吞吐量下降甚至宕机崩溃,那么如何检测出一个多线程程序中是否存在死锁呢?在提出解决方案之前,先对死锁产生的原因以及产生的现象做一个分析。最后在用有向环来检测多线程中是否存在死锁的问题。
56 0
|
22天前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
24 0
|
3月前
|
运维 监控 Java
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。
54 5
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
|
7月前
|
负载均衡 Dubbo Java
dubbo源码v2.7分析:结构、container入口及线程模型
Apache Dubbo 是一款高性能、轻量级的开源 Java 服务框架,提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
65 0
|
8月前
|
数据采集 缓存 数据挖掘
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项
GATK4标准分析流程 丨如何选择合适的线程和内存大小?数据预处理方法与注意事项
|
10月前
|
缓存 安全 Java
JAVA Thread Dump分析线程竞争
JAVA Thread Dump分析线程竞争
57 0
|
10月前
|
Java 调度 C++
JAVA 分析线程池中的keepAliveTime参数具体实现
JAVA 分析线程池中的keepAliveTime参数具体实现
202 0

热门文章

最新文章