【问题标题】:windbg: how to find size occupied for loaded moduleswindbg:如何查找已加载模块占用的大小
【发布时间】:2013-09-12 11:00:56
【问题描述】:

在windbg中,我可以用lm列出加载的模块。

如何找到这些程序集的内存占用?

我正在分析一个疑似使用过多内存的进程的转储,我注意到的一件事是程序集的数量,但不确定它们在内存中占用的大小。

此外,它们似乎不在连续的内存位置。还是我以某种方式对 lm 的输出进行排序?

谢谢!

【问题讨论】:

  • lm 只会显示模块消耗的代码和静态数据的大小。不会显示通过堆、堆栈或其他动态分配消耗的内存。这个问题不清楚你关心的是什么内存。

标签: windbg


【解决方案1】:

!address -summary 为您提供了一个很好的概览。 检查图像行

0:008> !address -summary

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free                                    212          b13cb000 (   2.769 Gb)           69.23%
Heap                                    455          25281000 ( 594.504 Mb)  47.18%   14.51%
<unknown>                               861          2168d000 ( 534.551 Mb)  42.42%   13.05%
Image                                   662           4e8e000 (  78.555 Mb)   6.23%    1.92%
Stack                                   156           3400000 (  52.000 Mb)   4.13%    1.27%
Other                                    39             54000 ( 336.000 kb)   0.03%    0.01%
TEB                                      52             34000 ( 208.000 kb)   0.02%    0.00%
PEB                                       1              1000 (   4.000 kb)   0.00%    0.00%

【讨论】:

    【解决方案2】:

    您可以使用lmvm module_name 检查每个模块的大小。有一个ImageSize 输出指示该模块的十六进制大小。

    已编辑:另一种方法是先lm 显示所有模块,然后使用!lmi start_address!lmi module_name 获取有关特定模块的信息。 !lmi 有一个 Size 字段,指示图像大小。

    请注意,对于加载的 .NET 4 本机图像,您必须使用 !lmi start_address,因为模块名称解析失败。

    【讨论】:

    • 由于OP提到了程序集,值得一提的是lmvm可能看不到CLR4程序集,因为它们没有加载LoadLibrary:blogs.microsoft.co.il/blogs/sasha/archive/2011/01/16/…
    • @MarcSherman,感谢您指出。然后应该使用!lmi,不幸的是,您链接的博客文章中没有提到。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2016-08-10
    • 2014-06-25
    • 2017-04-24
    相关资源
    最近更新 更多