【问题标题】:Web Based Stack Dump Tool for ASP.NET Using Mdbg?使用 Mdbg 的 ASP.NET 的基于 Web 的堆栈转储工具?
【发布时间】: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:

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

【问题讨论】:

    标签: asp.net multithreading debugging callstack mdbg


    【解决方案1】:

    我相信 .Net 的分析 API 是必经之路。

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

    问候 马西莫

    【讨论】:

      【解决方案2】:

      使用 .Net 的分析 API,您必须停止服务器,这会占用大量 CPU(但它可以让您完全控制所有调用的方法)。

      我认为最“轻松”的解决方案是使用 MDbg 进行此操作,我组装了一个非常小但很有用的小应用程序,名为 StackDump,它执行以下操作: 1) 调试器停止应用程序并生成为进程运行的所有 CLR 堆栈的列表。 2) 应用程序再次启动。 此操作是一种快速操作,可以(可能)在生产代码不变的运行生产服务器上执行。

      只需要 80 行 .Net 代码来管理它。我已经在 Codeplex 上发布了source code

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 2019-02-23
        相关资源
        最近更新 更多