问题标签 [memory-dump]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
752 浏览

c++ - 做什么?XXX!yyyyyyyyyy+zzz 在 !heap -flt s 输出中的意思

我正在分析一些用户模式内存转储以尝试追踪泄漏,并且我有一些关于泄漏的候选者,但是当我运行 !heap -flt s xx 命令时,我一直在我的转储中看到这些条目.

我明白了什么

线条是,但我不太确定线条是什么

真正的意义。这些转储是使用 +ust 标志捕获的,用于堆跟踪。

0 投票
1 回答
219 浏览

.net - typeperf 报告的内容与其他所有工具(mem profiler、process explorer、full dump)之间的差异

尝试对同一个 .net 3.5 应用程序的 2 个版本进行前后比较,结果不一致,具体取决于我使用的工具。

typeperf - 我认为这是权威的 - 说:

  • v1:244MB / 260MB(私有字节/工作集)
  • v2:281MB / 296MB

Process Explorer在性能图中显示了这些数字:

  • v1:283MB(私有字节)
  • v2:262MB

所以 typeperf 说 v2 需要更多的内存,Process Explorer 则相反。

这些都是单独的测量和不同的运行,但数字是惊人地可靠地重现。

除了前面提到的 2 个工具之外,我还从 Process Explorer 获取了完整的内存转储,并且只查看了文件大小(还没有时间去 WinDbg 或以其他方式分析它们):

  • v1:484MB(完整转储文件大小)
  • v2:480MB

此外,当从.net Memory Profiler运行应用程序时,v2 中的本机内存、.net 内存以及总内存都低于 v1。

所以它似乎是对世界其他地方的 typeperf(WinDbg 分析仍然很出色)。

谁是对的,我怎么知道?

0 投票
2 回答
10868 浏览

android - MAT (Eclipse Memory Analyzer) - how to view bitmaps from memory dump

I'm analyzing memory usage of my Android app with help of Eclipse Memory Analyzer (also known as MAT). Sometimes I can find strange instances of android.graphics.Bitmap class, utilizing big portion of heap. Problem is what I can't find source of this bitmaps, no filename, no resourceID, nothing. All information what I can find for bitmap is following: bitmap_info

There is a field mBuffer with array of image pixels, I assume. But it's in some internal Android format, not PNG.

Question: how can I view image represented by this bitmap from memory dump?

0 投票
2 回答
2469 浏览

debugging - 恢复内存转储

如果在没有调试器的计算机上进行测试,比如说客户的计算机,我遇到了一个可能已经破坏程序状态但实际上并没有崩溃的错误,我知道我可以使用 Windows 任务管理器进行内存转储(右键单击在进程名称上,创建转储文件)。

我可以将这些与 WinDbg 一起使用来查看内存等,但对我来说最有用的是能够将转储恢复到内存中,以便我可以继续与程序交互。这可能吗?如果是这样,怎么做?是否有可以恢复它的工具或者我需要自己编写。

0 投票
2 回答
826 浏览

.net - 无法在 DebugAnalyzer 中分析转储文件

我有一个来自 64 位机器的 64 位 w3wp 进程的内存转储。当我在 WinDbg 中打开它并用 psscor 或 sos 分析它时,它工作正常。

但是,我正在尝试使用DebugAnalyzer工具。当我打开它并点击“运行分析!” 按钮,这是我在对话框中看到的错误消息:

符号路径是正确的(与 WinDbg 使用的相同)并且我使用的是 64 位版本的 DebugAnalyzer。w3wp 进程使用的 .NET 版本是 .NET 4。

我在我的机器上找不到mscorwks.dll任何地方,但mscordacwks.dll在我的符号路径中。但是,由于 WinDBG 似乎不需要它,我不确定这是否是问题所在。

是否有人有使用此工具的经验或建议的故障排除步骤?

0 投票
1 回答
3946 浏览

c++ - 无法弄清楚我的代码有什么问题

我有一个我设法从我的 DLL 创建的转储文件,该文件是为任何未处理的异常创建的。

当我用 n = 4 做类似的事情int* tt = new int[4]; return int[n];时,我会得到转储文件,并可以打开它,看看错误是在哪一行引起的。这对于直接从发布 exe 和发布 DLL 都是可能的。

现在这是一个简单的错误,我输入它只是为了测试我的内存转储创建。

我现在有一个 900kb 的转储文件,事件日志显示错误来自我的 .DLL,但如果我打开该文件,它不会显示任何源代码。

调用堆栈是

KERNELBASE.dll!的RaiseException()+ 0x3D之间字节
clr.dll!RaiseTheExceptionInternalOnly()+ 0x18f字节
clr.dll!IL_Throw()+ 0xe2字节
000007fe81f65fd7()
00000000034d1610()
000000002d06ecb8()
436f93ce00050011()
436f93cf00110012()
000000002d06ec50()
00006d930c4f7680( )
clr.dll!InlinedCallFrame::`vftable'()
000000002d06f3d8()

这根本无法帮助我弄清楚我的错误来自 DLL 中的哪个位置。调试的另一个问题是,它只发生在实时 PC 上,但从不在我的调试系统上。谁能帮我找到一种方法来调试它?它似乎发生在调用 DLL 时,但是:不是每次,只是像每 2 次一样(有时是第一次尝试,有时是第 5 次)。我完全迷失了这里发生的事情。

编辑:使用加载的 Microsoft 符号更新了调用堆栈,但我仍然不知道这可能来自哪里。

0 投票
0 回答
1388 浏览

windows - 故障转储收集和性能影响

目前,我正在寻找一种解决方案,可以让我在生产环境中监视 .NET Windows 服务应用程序并收集内存转储。我想根据一些特定的阈值,随意和应用程序崩溃来收集它们。我知道实现这一目标的各种方法,例如:

  1. 调试诊断
  2. 过程转储
  3. 通过 WER
  4. 广告加
  5. WinDbg 等

一些方法有助于在崩溃期间进行收集,例如选项 #3,而其他方法可以根据性能计数器触发,例如 #1 和 #2。任何非侵入式调试器都可以帮助我完成收集,但我不确定附加一个调试器会对性能产生什么影响。例如,如果我使用带有 -e 开关的 Procdump 来收集未处理异常的内存转储,那么受监视应用程序的开销是多少?请记住,我指的是生产环境。

如果您能指出一个来源或方法来解释附加非侵入式调试器对内存转储收集的性能影响,我将不胜感激。理想情况下,这将是一个量化的衡量标准,尽管它超出了我的预期。

PS:我不是指内存转储写入磁盘所需的时间,应用程序完全冻结。那是另一回事。

0 投票
2 回答
1509 浏览

debugging - 高级 .NET 调试

我正在阅读 Advanced .NET Debugging 这本书,我非常喜欢它。但是我对这些例子有一些问题。如果有人读过它帮助我,我将不胜感激。

我有两个问题:

  1. 与构建示例的 .NET 框架的版本是什么?我无法在 windbg(x86) 下运行它们并且它们在 windbg(x64) 下加载,所以我假设它是 64 位版本的框架。但是哪个框架?2.0、3、3.5、4?

  2. 在查看第 2 章中描述的类型句柄(方法表)时,我得到了不同的结果(我的结果和书中显示的内容如下所示)。当然,我不是在谈论地址不同。例如,当我在方法表上 dd 时,我看到 Flags2 字段、NumMethods 字段的不同值。我不知道为什么。在第 56 页作者说对象的大小是 0x14(在我的机器上相同),因为对象有 4 个整数。但是 02TypeSample.cs 的列表只显示了 3 个整数,x、y、z。在我的机器上,dd 在示例中显示 7 时显示 4 个方法。书还说编译器生成了默认 ctor。

    “首先要记住的是,即使我们没有明确定义任何构造函数,C# 编译器也会自动为我们生成一个默认构造函数。

    在列出时,您可以看到 TypeSample 的 ctor 将 3 个整数作为参数。要么是我出了问题,要么是书,要么是例子。它是什么?;)

0 投票
0 回答
466 浏览

asp.net - “调试诊断工具”Full Dump 是否会导致垃圾收集或重新启动进程?

所以我有一系列 ASP.net Web 应用程序,每个应用程序都分配有自己的 AppPool

这会导致多个 w3wp.exe 实例驻留在内存中。

我一直试图弄清楚为什么他们中的一些人会在一天内稳步增加对 RAM 的使用。

我发现这个“调试诊断工具”可能有用的建议:

我下载了安装并尝试使用它来创建进程的完整转储。

由于某种原因,它失败了。

但是后来我注意到使用的内存(私有字节)从近 600Mb 下降到 ~90Mb

DDT 是否导致应用程序重新启动(或回收),或者是否调用了某种形式的垃圾收集并导致应用程序释放大量内存?

0 投票
1 回答
2379 浏览

c# - 内存碎片?

我不确定,因为我在分析内存转储方面没有太多经验,但我认为我们可能会遇到内存碎片问题。

在负载测试期间,我们看到内存使用量正在增长到应用程序重新启动的程度。它是 64 位机器上的 ASP.NET MVC 4 应用程序。我没有参与编写它。我只是被要求尝试分析内存转储。

因此,在上次负载测试期间,我们创建了 3 个内存转储(低于它们的大小和来自 eeheap -gc 的总 GC 堆大小输出):

  1. 1.70GB、292MB
  2. 2.03GB、337MB
  3. 2.55GB、347MB

因此,正如您所见,托管堆的增长速度不如转储文件。当我执行 dumpheap -stat 时,我看到大部分空间都被 Free 对象使用(下面是每个转储文件)

  1. 147MB
  2. 145MB
  3. 213MB

据我了解,当 Free 对象仅占所有堆大小的内存总量的一小部分时,这不是问题。这里看起来是个问题。

应用程序正在使用两个外部库。一种用于创建 PDF-s,另一种用于创建条形码文件。条码库抛出 AccessViolationException(2200 次尝试大约 70 次)。它与此堆栈跟踪一起抛出

p>

我读过内存碎片通常是由固定内存引起的,但这是 !gchandles 输出

我不知道我还能检查什么。我们有内存碎片问题吗?你能给我指出一些方向吗?

编辑:我附上了负载测试期间收集的性能计数器。很奇怪,因为它显示了很多固定的对象,但 !gchandles 没有显示它们。

在此处输入图像描述

Edit2:添加了大于 0.5 MB 的碎片块:来自 !dumpheap -stat 的输出