我遇到了一个 IIS 应用程序的问题,它偶尔会突然出现 CPU 使用率飙升的情况,我试图使用 procdump 获取内存转储以供检查。我运行“procdump.exe -64 -mA 9999”,其中 9999 是进程的 pid。但每次我这样做时,都会收到错误:
Only part of a ReadProcessMemory or WriteProcessMemory request was completed.
这样做还会回收应用程序池,缓解 CPU 峰值,因此我不能继续尝试,直到我做对为止。
有人知道发生了什么问题吗?
编辑更多信息: 到目前为止,无论我尝试什么工具,我都无法生成调试转储。所有这些工具似乎都会生成相同类型的错误。这是运行 IIS7 的 2008 R2 Datacenter,带有 64 位 asp.net 网站。
我最好的猜测是某些东西被阻塞了,导致某些请求在 IIS 中保持打开状态并逐渐耗尽资源。如果我使用 IIS 管理器监视工作进程并查看所有请求,那么一整天我都会开始看到一些请求“卡住”并永远运行。其中一些是针对静态文件的。一些是针对 aspx 页面的。我看不出它们有任何“常见”原因。
应用程序池偶尔会开始占用 100% 的 CPU,唯一的补救措施就是将其关闭。
答案1
我不确定是什么导致了该消息,但我知道您可以使用 SysInternals 的 Process Explorer 创建转储。在 Process Explorer 中,右键单击 w3wp.exe 并选择“创建转储”>“创建完整转储”。在我的 Windows 2003 x64 服务器上创建 350 MB 转储文件大约需要 15 秒。这也没有重新启动我服务器上的应用程序池。
另一个选择是 Microsoft 的 Debug Diag 工具。这是基于多种不同标准捕获进程转储的终极工具。
答案2
我遇到了类似的问题,不过是针对 Windows 服务。结果发现我的问题是在 64 位机器上运行的 32 位进程,因此运行procdump
而不是 才是procdump64
我的解决方案。
您是否尝试过procdump
和procdump64
?