【发布时间】:2010-12-13 12:33:07
【问题描述】:
MySpace.com 的首席系统架构师 Dan Farino 有一个很棒的 presentation,它展示了一个基于 Web 的堆栈转储工具,该工具对给定进程中运行的所有线程(它们的正在做,他们已经执行了多长时间等)
他们的技术也总结在highscalability.com:
-
PerfCollector。
集中 通过收集性能数据 UDP。比 Windows 更可靠 允许任何客户端连接并查看 统计数据。 -
基于 Web 的堆栈转储工具。
可以右键单击有问题的服务器 并获取 .Net 的堆栈转储 托管线程。以前不得不RDC 进入系统并附加一个调试器和 1/2 后得到答案。慢, 不可扩展且乏味。不仅仅是一个 堆栈转储,提供了很多上下文 关于线程在做什么。 故障排除更容易,因为您 可以看到 90 个线程被阻塞在一个 数据库,因此数据库可能已关闭。 -
Web 基础堆转储工具。
全部转储 内存分配。非常有用 开发商。通过以下方式节省数小时的时间 手。 • 探查器。跟踪请求 从头到尾并产生一个 报告。查看 URL、方法、状态、 一切都会帮助你 识别缓慢的请求。看着 锁争用,很多 抛出异常,任何东西 这可能很有趣。很轻 重量。它在一个盒子上运行 每个 VIP(100 台服务器组) 生产。每 10 个采样 1 个线程 秒。一直在追踪 背景。
问题是:为 ASP.NET 构建基于 Web 的堆栈转储工具需要哪些工具? 为方便起见,我们假设托管在目标 AppDomain 中的 *.aspx 能够输出该进程中的所有托管调用栈,就足够了。
有几篇文章介绍了 Mdbg(完全用 C#/IL 编写的托管代码的调试器,开始随 CLR 2 SDK 一起发布)和 mdbgcore程序集通常位于 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin:
- http://dotnetdebug.net/2005/11/09/exceptiondbg-v01-debug-your-exceptions/
- http://blogs.msdn.com/jmstall/archive/tags/MDbg/default.aspx
- http://blogs.msdn.com/vijaysk/archive/2009/11/04/asp-net-debugger-extension-for-iis-7.aspx
解决方案是否会简单地引用此程序集来产生所需的输出? “列出所有托管调用堆栈”操作会对为生产流量提供服务的正在运行的进程产生什么影响?
【问题讨论】:
标签: asp.net multithreading debugging callstack mdbg