使用Mdbg的ASP.NET基于Web的堆栈转储工具?

Nar*_*man 5 asp.net debugging multithreading callstack mdbg

MySpace.com的首席系统架构师Dan Farino 发表了精彩的演示,展示了一个基于Web的堆栈转储工具,该工具对在给定流程中运行的所有线程进行编目(他们正在做什么,他们执行了多长时间等等) .)

他们的技术也在highscalability.com上进行了总结:

  • PerfCollector.
    通过UDP集中收集性能数据.比Windows更可靠,允许任何客户端连接和查看统计信息.
  • 基于Web的堆栈转储工具.
    可以右键单击问题服务器并获取.Net托管线程的堆栈转储.用于将RDC导入系统并附加调试器,以后1/2获得答案.缓慢,不稳定,乏味.不仅仅是堆栈转储,还提供了很多关于线程正在做什么的上下文.故障排除更容易,因为您可以看到数据库上有90个线程被阻止,因此数据库可能已关闭.
  • Web Base堆转储工具.
    转储所有内存分配.对开发人员非常有用.节省数小时的手工操作.•Profiler.从头到尾跟踪请求并生成报告.请参阅URL,方法,状态以及有助于您识别慢速请求的所有内容.看看锁争用,抛出很多异常,任何可能有趣的事情.重量很轻.它在生产中的每个VIP(100个服务器组)中的一个盒子上运行.样品每10秒一次.始终在后台跟踪.

问题是:为ASP.NET构建基于Web的堆栈转储工具需要哪些工具?为方便起见,我们假设在目标AppDomain中托管的*.aspx能够输出该进程中的所有托管调用堆栈就足够了.

有一些帖子涵盖了Mdbg的使用(完全用C#/ IL编写的托管代码的调试器,开始随CLR 2 SDK一起提供)和mdbgcore程序集通常位于C:\ Program Files\Microsoft Visual Studio 8\SDK\2.0 \斌:

解决方案是否会简单地引用此组件以产生所需的输出?"列出所有托管调用堆栈"操作对正在为生产流量提供服务的运行进程有什么影响?

mas*_*ini 3

我相信 .Net 的分析 API 是正确的选择。

查看Google Code 上的SlimTune项目,获取包含源代码的实时示例,您可以检查如何适应和改进该项目以在 Asp.NET 场景中工作。

问候马西莫