java中在linux下利用jstack检测死锁
首先,编写一个死锁程序
package deadlock;
public class testJstack {
final static Object resource_1 = new Object();
final static Object resource_2 = new Object();
public static void main(String[] args) {
Thread t1 = new Thread("t1") {
public void run() {
synchronized (resource_1) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("locked resource_1");
synchronized (resource_2) {
System.out.println("thread t1 done.");
}
}
}
};
Thread t2 = new Thread("t2") {
public void run() {
synchronized (resource_2) {
System.out.println("locked resource_2");
synchronized (resource_1) {
System.out.println("thread t2 done.");
}
}
}
};
t1.start();
t2.start();
}
}
程序运行结果是:
lock resource_2
lock resource_1
接下来在终端中输入jsp查看当前运行的java程序:
7480 testJstack
13420 Jps
获取testJstack的进程ID为7480.然后使用命令:
jstack -l 7480 >deadlock.jstack
将jstack检测结果放入文件deadlock.jstack。使用vim查看该文件:
java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE java.lang.Thread.State: BLOCKED (on object monitor)
at testJstack$2.run(testJstack.java:29)
- waiting to lock <0x8c087670> (a java.lang.Object)
- locked <0x8c087678> (a java.lang.Object) java.lang.Thread.State: BLOCKED (on object monitor)
at testJstack$1.run(testJstack.java:15) Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
- None java.lang.Thread.State: RUNNABLE Locked ownable synchronizers:
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- locked <0x8c050b30> (a java.lang.ref.ReferenceQueue$Lock) Locked ownable synchronizers:
- None - waiting on <0x8c050a30> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
- locked <0x8c050a30> (a java.lang.ref.Reference$Lock) Locked ownable synchronizers:
"VM Thread" prio=10 tid=0x0807e800 nid=0x260c runnable JNI global references: 576 Found one Java-level deadlock:
=============================
"t2":
which is held by "t1"
"t1":
which is held by "t2" Java stack information for the threads listed above:
===================================================
"t2":
at testJstack$2.run(testJstack.java:29)
- waiting to lock <0x8c087670> (a java.lang.Object)
- locked <0x8c087678> (a java.lang.Object)
"t1":
at testJstack$1.run(testJstack.java:15)
- waiting to lock <0x8c087678> (a java.lang.Object)
- locked <0x8c087670> (a java.lang.Object) Found 1 deadlock.
java中在linux下利用jstack检测死锁的更多相关文章
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- 【调试】Linux下超强内存检测工具Valgrind
[调试]Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么? Valgrind的使用 Valgrind详细教程 1. Valgrind是什么? Valgrind是一套Lin ...
- 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误
嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报 分类: 嵌入式(928) 一般察看函数运行时堆栈的 ...
- linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开 ...
- 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能 要求:MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十 ...
- 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...
- Linux下利用script命令录制并回放终端会话
Linux下利用script命令录制并回放终端会话 核心命令 script 和 scriptreplay 录制屏幕 script -t 2>timescript typescript 命令解释: ...
- 【ARM-Linux开发】【CUDA开发】【视频开发】关于Linux下利用GPU对视频进行硬件加速转码的方案
最近一直在研究Linux下利用GPU进行硬件加速转码的方案,折腾了很久,至今没有找到比较理想的硬加速转码方案.似乎网上讨论这一方案的文章也特别少,这个过程中也进行了各种尝试,遇到很多具体问题,以下便对 ...
- linux下利用elk+redis 搭建日志分析平台教程
linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...
随机推荐
- 20150625_Andriod_02_ListView2_多条目显示_选中
android listview 参考地址: http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html http://xy ...
- Oracle OCCI学习之开篇
官网:Oracle C++ Call Interface 一.OCCI介绍 Oracle C++ Call Interface(OCCI)是一个用于访问Oracle数据库的高性能且全面的API.基于标 ...
- 华东交通大学2016年ACM“双基”程序设计竞赛 1003
Problem Description 风雨漂泊异乡路, 浮萍凄清落叶飞. 游子寻根满愁绪,一朝故土热泪归.Hey ecjtuer! 刚刚学习了二叉树的知识,现在来考察一下..给你一个深度为h的满二叉 ...
- 2016CCPC东北地区大学生程序设计竞赛 1001 HDU5922
链接http://acm.hdu.edu.cn/showproblem.php?pid=5922 题意:最小生成树,但边的权值是连接两点的最小公倍数 解法:不要真的写最小生成树啦,只要其他点和第一点相 ...
- EasyUI 自定义DataGrid分页
DataGrid内建分页能力是强大的,它比自定义相对容易.在这个教程,我们将要创建DataGrid并且在页面工具栏中添加一些自定义按钮.标记<table id="tt"> ...
- 多态,虚拟方法,重写,接口,类库,委托,is,as运算符,泛型集合,万能变量
多态:简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了vir ...
- SQL Server常用函数
---------数学函数 ) --开平方 ) --区绝对值 ) --保留小数点后1位 四舍五入保留 select COUNT(*)/5.0 from Car select CEILING(COUNT ...
- 【leetcode❤python】Find the Difference
#-*- coding: UTF-8 -*- class Solution(object): def findTheDifference(self, s, t): ...
- CocoaPods的安装[转载]
[转载] 原地址http://www.tuicool.com/articles/7VvuAr3 觉得很好,很有用 iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem ...
- JAVA GUI设计中遇到的一个小问题
最近新学,大牛勿喷.. 写下笔记主要是记录自己常犯的错误,也方便新人解决问题学习参考. 问题:win7下设计GUI,文本框和密码框显示不出来. 我的解决方案: 1. JTextField text = ...