码迷,mamicode.com
首页 > 编程语言 > 详细

java命令-jstack

时间:2018-04-09 17:19:10      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:rmi   AC   堆栈   生成   lock   wait   nbsp   分享图片   []   

 

jstack用于生产java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法

堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,比如线程间死锁、死循环、请求

外部资源导致长时间等待等。线程出现停顿的时候通过jstack命令可查看各个线程的调用堆栈

 

线程状态

new 未启动

runnable 在虚拟机内执行

blocked 阻塞并等待监视器锁

waiting 无限等待另一个线程执行特定操作

timed_waiting 有时限地等待另一个线程的特定操作

terminated 已退出

 

jstack使用简单示例(死锁情况模拟)

 1 public class DeadLock {
 2 
 3     public static void main(String[] args) {
 4         //获取当前线程pid
 5         System.out.println(ManagementFactory.getRuntimeMXBean().getName());
 6         Thread t1 = new Thread(new DeadLockClass(true));
 7         Thread t2 = new Thread(new DeadLockClass(false));
 8         t1.start();
 9         t2.start();
10     }
11 }
12 
13 
14 class DeadLockClass implements Runnable {
15     public boolean flag;
16 
17     public DeadLockClass(boolean flag) {
18         this.flag = flag;
19     }
20 
21     @Override
22     public void run() {
23         if(flag) {
24             while(true) {
25                 synchronized (SuoObject.obj_1) {
26                     System.out.println("obj_1" + Thread.currentThread().getName());
27                     synchronized (SuoObject.obj_2) {
28                         System.out.println("obj_2" + Thread.currentThread().getName());
29                     }
30                 }
31             }
32         }else {
33             while(true) {
34                 synchronized (SuoObject.obj_2) {
35                     System.out.println("obj_2" + Thread.currentThread().getName());
36                     synchronized (SuoObject.obj_1) {
37                         System.out.println("obj_1" + Thread.currentThread().getName());
38                     }
39                 }
40             }
41         }
42     }
43 }
44 
45 class SuoObject {
46     static Object obj_1 = new Object();
47     static Object obj_2 = new Object();
48 }

根据打印出的线程pid, 使用jstack pid命令,即可出现如下如所示结果,死锁的信息一目了然!!!

技术分享图片

 

java命令-jstack

标签:rmi   AC   堆栈   生成   lock   wait   nbsp   分享图片   []   

原文地址:https://www.cnblogs.com/codechange/p/8760890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!