51Testing软件测试论坛

标题: java线程死锁检测方法 [打印本页]

作者: xiaohanjiang    时间: 2009-12-16 22:04
标题: java线程死锁检测方法
线程死锁条件
一、理论
线程死锁条件:

1:互斥条件 ,即资源是不能够被共享的。
2:至少有一个进程在使用一个资源却在等待另外一个线程所持有的一个资源
3:资源部能够被进程抢占。
4:必须有循环的等待,永远等待

说白了,就是我要的资源被你锁了,你要的资源被我锁了,所以大家永远僵持谁都动不了
Ex:
下面为死锁的例子
public class DeadLock implements Runnable {


private boolean flag;



static String o1 = new String("str1"), o2 = new String("str2");



public void run() {


System.out.println(flag);


if (flag) {


//
给对象01上锁

synchronized (o1) {


try {


Thread.sleep(500);


} catch (InterruptedException e) {


e.printStackTrace();


}


//
给对象02上锁

synchronized (o2) {


System.out.println("AAA");


}


}



} else {

//
给对象02上锁

synchronized (o2) {


try {


Thread.sleep(500);


} catch (InterruptedException e) {


e.printStackTrace();


}


//
给对象01上锁

synchronized (o1) {


System.out.println("BBB");


}


}



}



}



public static void main(String[] args) {


DeadLock aaa = new DeadLock();


DeadLock bbb = new DeadLock();


aaa.flag = true;


bbb.flag = false;


Thread thA = new Thread(aaa);//
上锁的顺序
o1,o2


Thread thB = new Thread(bbb);//
上锁的顺序
o2,o1


thA.start();


thB.start();


}

}
二、jconsole检查死锁问题
配置
l
JRE
打开:java\jdk1.5.0\jre\lib\management目录,修改management.properties文件
SSL加密:(去掉161行注释)
#For RMI monitoring without SSL use the following line
com.sun.management.jmxremote.ssl=false
无用户密码验证:(去掉203行注释)
# For RMI monitoring without any checking use the following line
com.sun.management.jmxremote.authenticate=false


下面为服务配置

l
tomcat配置:

1. Windows,打开bin/catalina.bat,在doStart后面加上set JAVA_OPTS,端口可以自己设置,例如:

:doStart
shift

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=9393

运行tomcatstartup.bat),查看9393端口是否已经被Java所监听(netstat -ano

2. Linux,打开bin/catalina.sh,在doStart后面加上:

JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote.port=9393

运行tomcatstartup.sh),查看9393端口是否已经被Java所监听(netstat -tlunp

(!!!注意防火墙是否已打开,可能导致RMI协议无法连接该端口)


l
本地调试配置eclipse
jvm启动参数中,配置
-Dcom.sun.management.jmxremote.port=9393
同时也要设置运行的JRE1.5以上


l
运行jconsole

打开Windows命令行,如果本机上已经装有JDK1.5,并且路径配置正确,直接键入:jconsole
本地系统可以直接连接,远程需要自己输入IP连接




[ 本帖最后由 xiaohanjiang 于 2009-12-16 22:08 编辑 ]
作者: zhyb_2008    时间: 2009-12-17 08:32
顶一下。学习中。
作者: yzylion    时间: 2011-8-6 10:07
恩,收藏,上次只是简单了在windows界面下用了下,下次再用这个作为指导用用
作者: zhang.yuandong    时间: 2011-8-8 12:10
本帖最后由 zhang.yuandong 于 2011-8-8 12:12 编辑

回复 3# yzylion
楼上 你是职业PF的吧

作者: yzylion    时间: 2011-9-3 16:09
职业PF是什么?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2