java中在linux下利用jstack检测死锁
2016-03-13 21:32
501 查看
首先,编写一个死锁程序
程序运行结果是:
接下来在终端中输入jsp查看当前运行的java程序:
获取testJstack的进程ID为7480.然后使用命令:
将jstack检测结果放入文件deadlock.jstack。使用vim查看该文件:
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.
相关文章推荐
- 菜鸟入门--在linux下用vim编写一个C程序
- 学习Linux内核启动过程:从start_kernel到init
- Linux笔记(33)——软件安装包分类
- “Linux内核分析”实验报告
- Linux内核设计与实现 第一章 第二章
- Linux内核分析第三周——构造一个简单的Linux系统MenuOS
- 跟踪分析Linux内核的启动过程--20135334赵阳林
- Linux下Nagios的安装与配置
- 克隆系统后LINUX如何设置网卡
- 用VMware克隆CentOS 6.4后网卡不能使用处理方法
- 20135302魏静静——linux课程第三周实验及总结
- 跟踪分析Linux内核的启动过程
- Linux 第三周 学习笔记和实验
- Linux下gcc,g++,makefile的使用
- linux安全第三周总结
- Linux 第三周 学习笔记和实验
- CentOS6.5源码安装nodejs4.4
- 【MOOC EXP】Linux内核分析实验三报告
- linux内核分析 第三周
- lab3:跟踪分析Linux内核的启动过程