`
qiang08
  • 浏览: 602 次
社区版块
存档分类
最新评论

使用BTrace检查死锁

阅读更多

产生死锁的代码:

package neicun;

public class DeadLockTest {

	static class SynAddRunnable implements Runnable {
		private Object a, b;

		public SynAddRunnable(Object a, Object b) {
			this.a = a;
			this.b = b;
		}

		@Override
		public void run() {
			synchronized (a) {
				try {
					Thread.currentThread().sleep(3000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				synchronized (b) {
					System.out.println(a.toString() + " " + b.toString());
				}
			}
		}

	}

	public static void main(String[] args) {
		String a = new String("a");
		String b = new String("b");
		new Thread(new SynAddRunnable(a, b)).start();
		new Thread(new SynAddRunnable(b, a)).start();
	}
}

 打开jvisualvm,右击选中的java进程,选中->Trace application


 

在打开的窗口里面输入以下代码:

/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class TracingScript {
	/* put your code here */

    @OnTimer(4000)
    public static void print(){
        deadlocks();
    }
}

 

 上面代码的依旧就是每4秒钟检查以下死锁,dealdlocks方法是BTrace工具提供的静态方法,输出的结果如下:


从结果可知在代码22行处,因为Thread-0需要持有的锁已经被Thread-1所持有,而同样的Thread-1需要持有的锁已经被Thread-0锁持有。

 

 


 

  • 大小: 9.8 KB
  • 大小: 23.2 KB
分享到:
评论

相关推荐

    检查死锁工具

    在开发软件过程中, 使用多线程技术同步,经常出现死锁,这个工具可以检查 死锁发生锁在那个线程中了。

    java Thread Dump Lockness检查死锁

    这个对于定位死锁很重要,很简单。在运行java控制台的时候,都会用 java -classpath XXX org.XXX. main 这种方法 在管理控制台中按下ctrl + break 就能从界面上获得及时的堆栈信息了,但是这些信息很不方便。那么又...

    死锁检测工具LockCop.zip

    在实际操作中,我们需要根据LockCop提供的信息,检查代码中是否有不当的资源获取顺序,或者是否在等待资源时没有设置超时等可能导致死锁的情况。 总的来说,了解并掌握如何检测和处理死锁是每个多线程编程人员必备...

    Java多线程程序死锁检查 JCarder

    3. 开启监控:启动JCarder的监控功能,它会在后台持续检查死锁情况。 4. 收集报告:当JCarder检测到潜在的死锁时,会生成报告,包括死锁线程的详细信息、锁的持有情况以及线程间的等待关系图。 5. 分析和解决:...

    bTrace跟踪线程堆栈

    标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...

    btrace1.3.9

    2. **脚本编写**:BTrace使用一种简单的脚本语言,基于Groovy,开发者可以编写脚本来定义想要追踪的行为。例如,可以追踪方法调用、记录日志、计算性能指标等。 3. **安全机制**:BTrace有内置的安全策略,以防止不...

    检查Oracle数据库性能情况,包含:检查数据库的等待事件,检查死锁及处理

    根据提供的文件信息,我们可以深入探讨如何检查Oracle数据库的性能情况,包括检查数据库的等待事件、检查和处理死锁等关键方面。以下是对这些知识点的详细解释: ### 1. 检查Oracle数据库状态 #### 1.1. 查看...

    教您如何检查oracle死锁

    ### 教您如何检查Oracle死锁 #### 一、数据库死锁的现象 在日常工作中,当我们使用Oracle数据库进行数据操作时,可能会遇到一种特殊的情况——死锁。这种现象通常表现为程序在执行过程中突然停止响应,既无法继续...

    sql数据库死锁查询工具

    - 使用死锁预防策略:如预分配资源,使用行版本控制,或者设置合适的事务隔离级别。 **6. SQL死锁查询工具** "6.查询阻塞进程SQL工具"可能是指特定的数据库管理工具或脚本,用于实时监控和诊断SQL数据库中的死锁和...

    进程线程及死锁

    在实验中,我们使用互斥锁来避免死锁的发生。互斥锁是指一种机制,它可以防止多个进程同时访问同一个共享资源。通过使用互斥锁,我们可以避免死锁的发生,从而提高系统的稳定性。 理解进程、线程和死锁的概念对于...

    基于java的开发源码-多线程程序死锁检查 JCarder.zip

    基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...

    sqlserver如何快速查询死锁语句

    在SQL Server数据库管理系统中,死锁是一个...总的来说,通过监控未提交事务、查找阻塞和死锁的SQL语句,以及适时使用`KILL`命令,我们可以有效地管理和解决SQL Server中的死锁问题,确保数据库系统的稳定和高效运行。

    模拟死锁检测算法[死锁检测算法实现]

    在本实现中,我们将使用死锁检测算法来检测系统中的死锁。该算法通过反复查找进程等待表和资源分配表,来确定进程对资源的请求是否导致形成环路,若是,便确定出现死锁。 首先,我们需要输入两个文件:资源分配表...

    mysql死锁的一些案例

    - 锁粒度不一致:行级锁与表级锁的混合使用可能导致死锁。 2. **死锁的检测与解决**: - InnoDB存储引擎内置了死锁检测机制,当检测到死锁时,会终止一个事务,并返回错误信息(错误代码1213)。 - 用户可以通过...

    oracle-死锁查询

    oracle死锁问题查询代码,仅供参考,有问题大家一起交流

    检测线程死锁,告诉你如何检测线程死锁

    通过监视所有互斥锁的使用情况,该检测器能够及时发现任何可能出现的死锁,并准确地指出发生死锁的位置。这有助于开发者迅速定位问题并采取措施解决。 #### 七、总结 本文介绍了一种简单高效的线程死锁检测方法。...

    操作系统-死锁

    从进程同步的概念可以知道,当并发进程需要竞争使用资源或需要相互协作向前推进时,如果不采取同步措施,或同步措施不恰当,则很容易导致并发进程不能向前推进而陷入僵局,即死锁现象。死锁是发生在一组相互竞争或...

    DB2解决表死锁

    1. **识别死锁**:使用DB2的系统视图如SYSPROC.ADMIN_GET_DEADLOCKS,或通过错误日志确定哪些事务陷入死锁。 2. **回滚事务**:手动或自动回滚其中一个事务,释放其持有的锁,从而结束死锁状态。 3. **分析原因**:...

    MPI同步通信顺序模型死锁检测算法

    3. **周期检测**:定期检查进程状态,寻找循环等待的证据,一旦发现立即报告死锁。 此外,文章可能还探讨了算法的时间复杂性和空间复杂性,以及在不同规模的MPI系统中的性能表现。它可能还比较了提出的算法与其他...

    一次死锁追踪经历

    通过详细的日志分析、跟踪标志的使用,以及对数据库操作的深入理解,可以有效地定位和预防死锁问题。对于大规模数据库系统,定期监控和优化是防止类似问题的关键。同时,开发人员应当遵循良好的编程习惯,避免编写...

Global site tag (gtag.js) - Google Analytics