一个程序在运行的时候,如何知道它是否发生死锁,如果发生死锁,如何找到发生死锁的位置?
死锁的表现一般是线程BLOCKED
查看线程的StackTrace 就能解决死锁的问题
用jdk自带的工具 在%JAVA_HOME%\bin下的virtualVM 或是 vmConsole 都可以
点击线程进去 然后就能查看是否有死锁了
ThreadPrint.jsp打印线程信息的页面
<%@ page contentType="text/html; encoding=gb2312"%><%@ page import="java.lang.management.*"%><%
ThreadMXBean tm = ManagementFactory.getThreadMXBean();
tm.setThreadContentionMonitoringEnabled(true);
%>
<b>Thread Count: </b><%=tm.getThreadCount()%><br>
<b>Started Thread Count: </b><%=tm.getTotalStartedThreadCount()%><br>
<b>thread contention monitoring is enabled? </b><%=tm.isThreadContentionMonitoringEnabled()%><br>
<b>if the Java virtual machine supports thread contention monitoring? </b><%=tm.isThreadContentionMonitoringSupported()%><br>
<b>thread CPU time measurement is enabled? </b><%=tm.isThreadCpuTimeEnabled()%><br>
<b>if the Java virtual machine implementation supports CPU time measurement for any thread? </b><%=tm.isThreadCpuTimeSupported()%><br>
<hr>
<%
long [] tid = tm.getAllThreadIds();
ThreadInfo [] tia = tm.getThreadInfo(tid, Integer.MAX_VALUE);
long [][] threadArray = new long[tia.length][2];
for (int i = 0; i < tia.length; i++) {
long threadId = tia[i].getThreadId();
long cpuTime = tm.getThreadCpuTime(tia[i].getThreadId())/(1000*1000*1000);
threadArray[i][0] = threadId;
threadArray[i][1] = cpuTime;
}
long [] temp = new long[2];
for (int j = 0; j < threadArray.length - 1; j ++){
for (int k = j + 1; k < threadArray.length; k++ )
if (threadArray[j][1] < threadArray[k][1]){
temp = threadArray[j];
threadArray[j] = threadArray[k];
threadArray[k] = temp;
}
}
for (int t = 0; t < threadArray.length; t ++)
{
ThreadInfo ti = tm.getThreadInfo(threadArray[t][0],Integer.MAX_VALUE);
if (ti == null) continue;
%>
<b>Thread ID: </b><%=threadArray[t][0]%><br>
<b>Thread Name: </b><%=ti.getThreadName()%><br>
<b>Thread State: </b><%=ti.getThreadState()%><br>
<b>Thread Lock Name: </b><%=ti.getLockName()%><br>
<b>Thread Lock Owner Name: </b><%=ti.getLockOwnerName()%><br>
<b>Thread CPU Time: </b><%=threadArray[t][1]%> sec<br>
<b>Stack Info: (depth:<%=ti.getStackTrace().length%>)</b><br>
<%
StackTraceElement[] stes = ti.getStackTrace();
for(int j=0; j<stes.length; j++)
{
StackTraceElement ste = stes[j];
%>
+<%=ste%><br>
<%
}
%>
<hr>
<%
}
%>
分享到:
相关推荐
dead lock 是指多个进程之间的资源竞争,以致于每个进程都在等待其他进程释放资源,而导致系统的卡死。为了避免 dead lock,操作系统需要使用同步和互斥机制,以确保进程之间的协作和交流。 在操作系统中,资源的...
内部的技术资料,详细介绍了Android核心转储的分析方法,特别关注了死锁(Dead Lock)、SkRegion内存损坏以及ART(Android RunTime)内存损坏等关键问题。 1. **死锁(Dead Lock)**: 死锁是指两个或多个并发进程...
定期的检查数据库日志,看日志是否报“dead lock”错。 数据库开发中各种死锁剖析中,类型一:事务中 sql 语句先后顺序不当造成死锁。说明代码中事务控制逻辑不当,引起死锁。例如,2009 年 02 月 16 日,海外某局...
它可以帮助我们识别性能瓶颈,如死锁(Dead Lock),并提供图形化分析以理解死锁是如何发生的。Profiler还可以将监控信息保存为XML文件,方便后续分析和处理。此外,Profiler可以与Performance Monitor结合,提供更...
死锁(Dead Lock)是多用户并发操作中可能出现的一种情况,当两个或多个事务互相等待对方释放资源而造成的一种僵局。Scott 提出的死锁模型包括两个主要条件:互斥条件(a.Scott 1)和不可抢占条件(b.Scott 2),即...
52. Dead lock:死锁 53. Deallocation:归还 54. Deploy:部署 55. Dereference:解引用 56. Dereference operator (提领 ):运算子 57. Derived class:派生类 58. Design by contract:契约式设计 59. Design ...
4. 死锁问题(Dead Lock) 死锁发生在两个或更多线程相互等待对方释放资源时,导致所有线程都无法继续执行。避免死锁的关键是减少线程间的依赖,谨慎使用 `sync` 调度,确保线程间的资源获取顺序不会形成环路。 5....
"03 CPU scheduling and dead lock.ppt"讨论的是CPU调度和死锁问题。CPU调度算法如FCFS(先来先服务)、SJF(短作业优先)、优先级调度等用于决定进程何时以及如何获得处理器。而死锁是指多个进程因争夺资源而造成的...
同时,处理器的调度(Process Scheduling)确保多个进程公平地共享CPU时间,避免死锁(Dead Lock)的发生。设备管理涉及I/O设备的控制,防止资源争用导致的问题。此外,文件系统管理着信息资源,而加载器(Loader)...
操作系统原理与应用进程管理是计算机科学的核心部分之一,涵盖了计算机系统的基本概念、进程管理、线程管理、进程同步、 DEAD LOCK 等重要知识领域。在这个学习教案中,我们将详细地探索进程管理的基本概念、进程...
- **Dead Lock(死锁)**:多个进程互相等待对方释放资源,导致无法继续执行的状态。 2. **C++核心概念**: - **Virtual Function(虚函数)**:允许子类重写基类的方法,是多态性的重要实现。 - **Const**:...
40. **Dead Lock**:死锁,两个或更多进程相互等待对方释放资源,导致无法继续执行的情况。 41. **Deallocate**:归还,释放已分配的内存或资源。 42. **Debug**:调试,找出并修复程序错误的过程。 43. **Debugger*...
TinyLog Tinylog是用于UNIX环境的轻量级C语言高性能日志组件,它是用于C / C ++的高性能,异步,线程安全和进程安全的日志库。 它支持日志归档,异步,多线程写入,多处理写入,非阻塞模式。 输出示例: ...
EurekaLog 7.5 (18-August-2016) 1)..Important: Installation layout was changed. All packages now have version suffix (e.g. EurekaLogCore240.bpl). No files are copied to \bin folder of IDE....
**5、Dead-Lock锁** 死锁是指两个或多个事务互相等待对方释放资源,导致整个系统陷入僵局的情况。InnoDB通过定时检测死锁并选择回滚其中一个事务的方式来解决死锁问题。例如,事务A锁定了记录1,并试图锁定记录2;...
Availability Problems-- Fail Recovery Dead Lock Availability Problems-- Phoenix Index Write Error Handler Availability Problems Availability Problems-- Monitor Availability Problems-- RuleBased SQL ...