Who is blocking that Mutex? - Fun with WinDbg, CDB and KD 05 Aug 2006 By Ingo Rammer I'm currently toying with the idea of creating a small frontend to SOS.DLL (CDB/WinDbg) and KD. This frontend should simplify some production debugging tasks based o…
使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题 前言 本文介绍本人的一次使用Windbg分析dump文件找出死锁的过程,并重点介绍如何确定线程所等待的锁及判断是否出现了死锁. 对于如何安装及设置Windbg请参考:<使用Windbg和SoS扩展调试分析.NET程序>http://www.cnblogs.com/shanyou/archive/2006/12/23/601004.html 起因 今天,部署到生产环境中的软件再次发生了不响应请求的问题,看了系统日志与软件本身的l…
前言 本文介绍本人的一次使用Windbg分析dump文件找出死锁的过程,并重点介绍如何确定线程所等待的锁及判断是否出现了死锁. 对于如何安装及设置Windbg请参考:<使用Windbg和SoS扩展调试分析.NET程序>http://www.cnblogs.com/shanyou/archive/2006/12/23/601004.html 起因 今天,部署到生产环境中的软件再次发生了不响应请求的问题,看了系统日志与软件本身的log都没发现异常,而在任务管理器中软件占用了1G多的内存,有点偏高(…
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog.csdn.net/m366917 我们来继续学习多线程 Lock锁的使用 尽管我们能够理解同步代码块和同步方法的锁对象问题,可是我们并没有直接看到在哪里加上了锁.在哪里释放了锁.为了更清晰的表达怎样加锁和释放锁.JDK5以后提供了一个新的锁对象Lock Lock void lock():获取锁 v…
一.死锁现象与递归锁所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程解决方法,递归锁,这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require.直到一个线程所有的acquire都被release,其他的线程才能获得资源.一个线程拿到锁,counter加1,该…
背景 用metux lock for循环,在for循环中又 向带缓冲的Channel 写数据时,千万要小心死锁! 最近,我在测试ws长链接网关,平均一个星期会遇到一次服务假死问题,因为并不是所有routine被阻塞,故runtime的检查无法触发,http health check又是另开的一个端口,k8s检查不到异常,无法重启服务.   经过一番排查论证之后,确定了是 混用带缓冲的Channel和Metux造成的死锁 (具体在文末总结)问题,请看下面详细介绍. 死锁现象 我们使用了gin框架,…
查找bug是程序员的家常便饭,我身边的人喜欢让用户来重现问题.当然他们也会从正式服务器上下载错误log,然后尝试分析log,不过当错误不是那种不经思考就可识别的情况,他们就会将问题推向用户,甚至怪罪程序依赖的平台.他们常用的借口就是“这个问题很难重现,需要持续监控,而且不知道要监控几天”.下次出现,同样是这个说法. 编程珠玑一书的作者说,“对付问题而不是程序”,这是方向.程序员一旦有了方向就是全世界最聪明的人,反之则会用最聪明的头脑做最蠢的事情,说最蠢的话.查找错误的方向就是基于科学的方法理解问…
一.背景 先说下windbg使用场景.各位coder在工作中或多或少都会遇到下面四种情况 1.本地代码好好的,放服务器上运行一段时间后,IIS服务突然占用 w3wp.exe CPU突然100% ,不得不回收应用程序池,如果哪次回收晚了,被客户发现,后果很痛苦~ 2.你的w3wp.exe 内存高居不下 并且逐步上升 3.cpu很低,内存也很低,但你的网页打开却越来越慢,而你该做的优化都做过了,却没有任何效果.. 4.你的程序本地运行好好的,但是到服务器上了,在某个时候会突然报错,再次刷新却又好了.…
use master if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_who_lock]') ) drop procedure [dbo].[sp_who_lock] GO create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountOnEntry int, @intRowcount int…
一.首先准备好一个程序,运行起来,用windbg进行附加调试,由于每个windows下的程序都会加载kernel32.dll,因此,找基址的过程是一样的:  二.查看PEB地址: 法一.r $peb 法二.通过TEB获取,r $teb 获取到teb地址后,对_TEB结构体解析dt _TEB 3ca000 法三.通过fs寄存器获取,我们知道fs:[0]就是TEB结构体的首地址,但是,在windbg里dd fs:[0]时,地址却做了隐藏: 那该怎么办呢,其实,这就要看下TEB的结构了 在TEB结构的…