杀鸡焉用牛刀!放下Windbg,让dotnet-stack来快速定位死锁原因

我们用来分析CPU过高、死锁问题的常见方案是使用Windbg分析dump文件

但是这种方式存在一些缺点,比如dump文件过大难以下载,windbg使用过于复杂难以掌握等。

这里介绍一个小工具dotnet-stack,帮助我们检查托管代码调用堆栈,快速定位到当前执行的代码,找到问题原因。

准备代码

新建ConsoleApp1,编写如下代码:

static void Main(string[] args)
{new Program().TestLock();Console.Read();
}void TestLock()
{lock (this){var task = Task.Factory.StartNew(() =>{Console.WriteLine("-------开始-------");Deadlock();Console.WriteLine("---------完成--------");});task.Wait();}
}void Deadlock()
{lock (this){Console.WriteLine("公众号“My IO”");}
}

示例代码通过抢占lock模拟死锁现象,运行代码后,可以发现命令行停在"-------开始-------"就没有继续输出了。

分析问题

首先,运行下面的命令安装dotnet-stack:

dotnet tool install --global dotnet-stack

然后,我们需要找到死锁程序对应的进程id。虽然可以用任务管理器或者ps去查看,但是这里可以直接用命令获取:

dotnet-stack ps

拿到ConsoleApp1的进程id6004,运行下列命令:

dotnet-stack report --process-id 6004

该命令可从进程中收集跟踪的所有堆栈。格式如下:

  • 注释前缀为#

  • 每个线程都有一个包含本机线程ID的头:Thread (<thread-id>):

  • 托管代码:  模块!方法

  • 非托管代码:[Native Frames]

从图中可以看到,最后执行到的代码是ConsoleApp1!Program.Deadlock(),对照代码,就可以轻松找到死锁原因了。

结论

dotnet-stack麻雀虽小,但是功能不错,用于解决死锁问题还是不错的。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学中那些非常奇葩的证明

全世界只有3.14 % 的人关注了青少年数学之旅一、费马大定理证明证&#xff1a;是无理数假设是有理数&#xff0c;p和q是互素正整数那么移项得又由费马大定理可知&#xff1a;与费马大定理(Fermats last therorem)矛盾, Q.E.D. &#xff08;也可易证2的n分之一次方且n属于大于2的…

linux代码段起始地址设置,Arch Linux安装后的一些初始设置简介

配置有线网络。没网络的时候&#xff0c;可以直接设定ip应急&#xff0c;后面 netctl 才是正规设置&#xff1a;复制代码代码如下:# ip addr add 192.168.0.100/24 dev enp0s4# ip link set dev enp0s4 up# ip route add default via 192.168.0.1# echo nameserver 208.67.222.…

安装Linux后的遗留问题

一些Linux用户经常询问这样的问题&#xff1a;Linux能兼容XXX卡么&#xff1f;其实&#xff0c;Linux是一个开放性的系统&#xff0c;只要通过Linux爱好者们的努力&#xff0c;Linux可以兼容任何硬件。 一&#xff0c;声卡 首先要知道声卡的类型&#xff0c;或者是某种声卡兼容…

使用 Minimal API 改造动态文件提供者

使用 Minimal API 改造动态文件提供者Intro之前介绍过一个基于动态文件提供者来实现静态网站的动态更新&#xff0c;可以参考 ASP.NET Core 实现一个简单的静态网站滚动更新&#xff0c;在 Minimal API 出现之后想改造成 Minimal API 的写法&#xff0c;但是由于之前版本的 Min…

[导入]体验Asp.Net Mvc Preview5(3)-探索ModelBinder的工作原理

摘要: 在前面的两篇文章中,我们研究了Asp.Net Mvc Preview5的ViewEingine的改进,从本篇开始,我们开始研究Preview5中的新特性:ModelBinder,首先我们来了解下什么是ModelBinder特性,这有什么用处,在以前的版本中,如果我们要在Action中获取数据,一般有三种方式,一是通过Action的参…

bcdedit

我的电脑装了双系统&#xff1a;Win2003 SP2&#xff08;C盘&#xff09;和Win2008 SP2&#xff08;D盘&#xff09;&#xff0c;最近2003一启动就蓝屏unknown hard error&#xff0c;安全模式也进不去&#xff0c;恢复注册表等方法试过也不行&#xff0c;但2008正常&#xff0…

一招教你舍友学会尤克里里 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅视频源 洋味铁汁联盟

linux cpu softirq,linux softirq机制

Copyright © 2003 by 詹荣开E-mail:zhanrksohu.comLinux-2.4.0Version 1.0.0&#xff0c;2003-2-14摘要&#xff1a;本文主要从内核实现的角度分析了Linux 2.4.0内核的Softirq机制。本文是为那些想要了解Linux I/O子系统的读者和Linux驱动程序开发人员而写的。关键词&…

复盘:我的三个月远程办公实践,有自由,也有代价

这是头哥侃码的第244篇原创有人说&#xff0c;人生就是一个不断尝试的过程。我觉得&#xff0c;有时候这个词其实不准确&#xff0c;因为每个人的性格不同&#xff0c;成长经历及运势不同&#xff0c;所以对 “尝试” 俩字的理解也就不同。在我还是孩子的时候&#xff0c;几乎所…

信息网络传播权保护条例(2006)

信息网络传播权保护条例(2006)[url]http://www.ncac.gov.cn/GalaxyPortal/inner/bqj/include/detail.jsp?articleid9400&boardpid175&boardid11501010111602[/url]转载于:https://blog.51cto.com/dgcnn/20682

Silverlight专题(10)- WatermarkedTextBox使用

问题&#xff1a; 之前的Silverlight版本都有一个WatermarkedTextBox控件 但是到了Silverlight 2 Beta2版本&#xff0c;由于和WPF兼容的考虑 WatermarkedTextBox被移除了 虽然之前我有看到消息说Silverlight 2正式Release的时候会给TextBox一个Watermark属性 但是Silverlight …

asp.net ajax检查用户名是否存在代码

原文 asp.net ajax检查用户名是否存在代码 用户注册时&#xff0c;我们经常需要检查用户名是否存在&#xff0c;本文就是实现无刷新验证用户名 打开开发环境VS 2005,新建项目(或打开现有项目),新建一个Web窗体,命名为 Default.aspx 创建 XMLHttpRequest 对象所有现代浏览器 (I…

90后一代人还能通过攒钱改变现状吗?

全世界只有3.14 % 的人关注了青少年数学之旅每次打开公号&#xff0c;扑面而来一阵阵焦虑&#xff1a;95后毕业3个月就买房&#xff0c;你的同龄人正在抛弃你毕业3年&#xff0c;年薪超100万&#xff1a;赚钱&#xff0c;是一种修行一线城市财务自由门槛2.9亿&#xff0c;看看你…

linux中人脸识别不了,虹软人脸识别在 linux中so文件加载不到的问题

其实是可以加载到的&#xff0c;不过是so文件放的位置不一对&#xff0c;最简单的方式是放在 /usr/lib64 目录下&#xff0c;也可自己设置。 so文件加载不到会报这个错误&#xff1a;.lang.UnsatisfiedLinkError: no arcsoft_face_engine_jni in java.library.path] with root …

从高德侯军到《李嘉诚:商者无域》

从高德侯军到《李嘉诚&#xff1a;商者无域》 【编者按】转载这篇文章是因为看到了业内著名企业高德董事长侯军跻身2008胡润排行榜&#xff0c;让人不禁联想起高德在业内一贯的潜行风格&#xff0c;而侯军先生也颇有点“忍者神龟”的隐喻&#xff0c;在业内企业家当中属闷声发大…

测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机

龙芯3A5000 已经上市&#xff0c;从老伙计哪里搞来一台3A5000 机器&#xff0c;安装统信UOS。使用体验上看还可以&#xff0c;就是软件生态急需建设&#xff0c;软件生态的建设上自然有我dotnet 的一份力量。龙芯团队已经完成了LoongArch 的.NET Core 3.1版本的研发&#xff0c…

利用jquery给指定的table动态添加一行、删除一行

今天在项目中&#xff0c;刚好用到给指定的table添加一行、删除一行&#xff0c;就直接找google&#xff0c;搜出来的东西不尽如人意&#xff0c;不是功能不好就是千篇一律&#xff0c;简直浪费时间还不讨好&#xff0c;于是乎就自己动手封装个&#xff0c;现就把代码分享出来&…

求求你把输入法调小一点... | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅

LoadRunner Interview Questions

摘自&#xff1a;网络1. What is load testing? Ans. Load testing is to test that if the application works fine with the loads that result from large number of simultaneous users, transactions and to determine weather it can handle peak usage periods.2. Wha…

linux安装卷管理,Linux安装管理ISCSI卷(initiator端)

Internet SCSI(iSCSI)是一种网络协议&#xff0c;使用TCP/IP网络来传输SCSI协议。它是代替FC(Fibre Channel-based&#xff0c;光纤通道&#xff1f;) SAN的很好选Internet SCSI(iSCSI)是一种网络协议&#xff0c;使用TCP/IP网络来传输SCSI协议。它是代替FC(Fibre Channel-base…