gpt4 book ai didi

asp.net - 如何调试尖峰 ASP.NET 进程的内存转储?

转载 作者:行者123 更新时间:2023-12-04 23:11:28 24 4
gpt4 key购买 nike

抱歉,我想不出一个好方法来表达我真正的问题。

我在 64 位机器上运行一个高流量的 ASP.NET 站点。但是,由于应用程序的一些遗留组件,我让 IIS 以 32 位模式运行。我正在一个应用程序池中运行这个特定的 Web 应用程序,该应用程序池启用了 Web 花园选项(在 8 核机器内运行 6 个进程)。

每周一两次,其中一个进程的 CPU 使用率会飙升至 100%,从而导致站点速度大幅下降,所以我的计划是等到这种情况发生,内存转储有问题的进程,然后在 WinDbg 周围将其调零线程正在飙升以查看代码在哪里旋转。

我之前曾使用 WinDbg 进行过调试,以找出导致站点死锁的原因,但那是几个月前的事情,我不记得我是如何让它工作的。 (作为旁注,这是记录您所做的一切的一课。)

我在运行该站点的 Windows 2003 服务器上运行 WinDbg,以防止出现任何 DLL 版本问题。到目前为止,这是我的步骤,请让我知道我哪里出错了以获取我收到的错误消息。

  • 我首先使用 UserDump 对尖峰进程进行内存转储,使用以下命令,其中 3389 是进程的 ID:
    userdump -k 3389
  • 我将转储加载到 WinDbg 的 x86 版本中。
  • 由于我在 64 位机器上运行 32 位,我首先加载内存转储,然后:
    .load wow64exts.effmach x86
  • 我确保我的符号路径包含包含我的应用程序 PDB 文件的目录:
    .sympath+ c:\inetpub\myapp\bin
  • 仅运行 `.load SOS' 失败并显示“系统找不到指定的文件”的错误,因此我采用以下完全限定的路线,该路线有效:
    .load c:\windows\microsoft.net\framework\v2.0.50727\sos

  • 从这里,我迷路了。我尝试了任何 SOS 命令,例如 !threads ,只是为了得到这个错误:
    Failed to load data access DLL, 0x80004005

    该错误还伴随着我应该验证的项目编号列表。
    我已经确认我正在运行最新版本的调试器,mscordacwks.dll 实际上与 mscorwks.dll 文件位于同一目录中,并且我正在与转储文件相同的体系结构上进行调试。

    我还运行了神奇的“ .cordll -ve -u -l”命令,但这并不能解决任何问题。当我执行它时,我总是收到“ CLR DLL status: No load attempts ”的欢迎。然后我尝试“ .reload”,它会产生一些警告,比如“ WARNING: wldap32 overlaps dnsapi”。我希望它说的是“ CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll”之类的东西。但事实并非如此。

    最佳答案

    在运行 sos 命令之前尝试执行 !sw。看到这个 blog post .

    关于asp.net - 如何调试尖峰 ASP.NET 进程的内存转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/178762/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com