jstack命令使用

概述

jstack可用于导出java运用程序的线程堆栈。其基本使用语法为:

jstack [-l] pid

-l 选项用于打印锁的额外信息。

使用演示样例

以下这段代码执行之后会出现死锁现象(由于线程1持有lock1。在等待lock2。线程2持有lock2在等待lock1,造成了循环等待。形成死锁):

package com.winwill.deadlock;/*** @author qifuguang* @date 15/6/4 16:45*/
public class TestDeadLock {private static final Object lock1 = new Object();private static final Object lock2 = new Object();public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock1) {try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}synchronized (lock2) {System.out.println("线程1执行....");}}}});Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {synchronized (lock2) {try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}synchronized (lock1) {System.out.println("线程2执行...");}}}});t1.start();t2.start();}
}

我们执行这段代码,然后使用jstack命令导出这个程序的线程堆栈信息:

[qifuguang@Mac~]$ jstack -l 21023 > /tmp/deadlock.txt

打开导出的线程堆栈信息文件。文件末尾例如以下所看到的:

这里写图片描写叙述

如图所看到的。导出的线程堆栈文件里明白提示发现死锁。而且指明了死锁的原因。

总结

jstack不仅可以导出线程堆栈。还能自己主动进行死锁检測,输出线程死锁原因。

转载于:https://www.cnblogs.com/zfyouxi/p/5201994.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python运算符优先级

找了个表格。 参考网址:http://www.runoob.com/python/python-operators.html转载于:https://www.cnblogs.com/Deribs4/p/5203936.html

windows server 2012服务器IIS基本配置

转载于:https://www.cnblogs.com/wuyubing/p/5204175.html

[转]Xcode的重构功能

Xcode提供了以下几个重构功能: Rename Extract Create Superclass Move Up Move Down Encapsulate 在菜单栏中的位置如下图: 在代码区里直接右键也能出现重构的相关菜单: 下面就分别介绍这些重构功能的使用。 Rename:重命名 …

项目开发模式

项目开发模式 在预测未来之前,首先分析一下程序员的日常工作中遇到哪些困难与挑战。 需求和设计 在需求沟通阶段,程序员需要准确的获取PRD上的需求信息,并对业务的价值和发展有一定的预判。根据以上的信息进行技术选型,数据建模&a…