如何使用大量 CPU 快速获取线程的托管堆栈跟踪
Posted
技术标签:
【中文标题】如何使用大量 CPU 快速获取线程的托管堆栈跟踪【英文标题】:How to quickly get the managed stack trace of threads using lots of CPU 【发布时间】:2012-01-11 21:27:18 【问题描述】:在诊断高 CPU 问题时,首先想到的问题是哪个线程正在使用所有 CPU 以及它在做什么(在托管代码术语中)?为了解决这个问题,例如需要安装 Process Explorer 来查找有问题的线程。然后需要捕获进程的转储,将其加载到诸如 windbg 之类的东西中并找出线程在做什么 - 找出每个线程的托管堆栈跟踪。
这个过程有点费时。是否有可以编写的工具(免费或付费)或可靠的代码,可以在几秒钟内完成所有这些(单击按钮)。我希望看到的最终结果是一个按 CPU 利用率排序的线程列表,以及它所在的当前方法,并且可以选择向下钻取以查看整个堆栈跟踪。基本上与您在 Process Explorer 中看到的内容相同,但托管代码除外。
这需要适用于 .NET 4.0。
【问题讨论】:
查看 Sam Saffron 的博客 - 他有一个 CPU 分析工具,当 CPU 变高时我们在 SE 使用:samsaffron.com/archive/2009/11/11/… msdn.microsoft.com/en-us/magazine/ee336027.aspx @HansPassant 如果我记得很清楚,它已集成到分析工具中,因此仅适用于非常高成本的 VS 版本。 知道它是哪些线程对您没有帮助。你需要一个 CPU 分析器。 【参考方案1】:您可以构建自己的迷你分析器,例如 http://samsaffron.com/archive/2009/11/11/Diagnosing+runaway+CPU+in+a+Net+production+application
查看Diagnosing runaway CPU in a .Net production application
【讨论】:
以上是关于如何使用大量 CPU 快速获取线程的托管堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章
获取 Java 线程 id 和失控 Java 线程的堆栈跟踪