【发布时间】:2018-02-13 12:35:49
【问题描述】:
我目前支持的产品似乎正在消耗大量桌面堆。二进制文件主要是 .net,并且都将会话 0 作为非交互式进程运行(它们都是已安装 Windows 服务的子进程)。因此,据我所知,它们不应该消耗任何桌面堆。
我们有一些环境在系统日志中报告事件 ID 243,然后间歇性地在应用程序日志中报告事件 ID 1000;应用程序日志中的异常始终为 0xc0000142。最终,我们的一项服务也会因一些神秘(无用)的消息而崩溃。不幸的是,我们从未能够捕获到异常,但这些似乎都是桌面堆耗尽的非常明确的指标。
我正在尝试找出消耗这么多桌面堆的原因,以便找出原因。但这是我非常卡住的地方。最初我计划安装 Desktop Heap Monitor,但在尝试让它工作失败后,我意识到它在 XP 之前的任何东西上都不支持。我在某处读到 Process Explorer 应该能够给我相同的信息,所以我们一直在监视 PE 中的以下对象:
- 句柄计数
- GDI 对象
- 用户对象
报告事件 243 时的句柄计数值与几天前未发生问题时的处理计数值没有显着差异,甚至在进程启动后的几分钟内也没有显着差异。并且 GDI 和 USER 对象都为零。因此,我不知道究竟是什么耗尽了桌面堆,或者就此而言,如何进一步调试它。我在某处读到 WeakEventManager 可能会导致这个问题,但我们似乎并没有使用它。
我已经在 google 和 SO 上搜索了这个东西,但到目前为止我还没有找到任何东西。我真正想要的是确定哪个进程正在耗尽堆,或者至少哪个进程消耗最多。如果有人对如何执行此操作有任何指示,我将不胜感激。
【问题讨论】:
标签: .net service heap-memory