- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试查找非托管堆的根本原因。我的应用程序是一个 .NET 应用程序,但它调用了一些 C++ 的第三方库。我拍摄了两个相距 1.5GB 的内存快照。
这是第一个快照的 !address -summary 的输出
0:000> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 1144 7fa`6695c000 ( 7.978 Tb) 99.73%
<unknown> 1498 4`4ba12000 ( 17.182 Gb) 76.71% 0.21%
Heap 1507 1`13c3c000 ( 4.309 Gb) 19.24% 0.05%
Stack 2385 0`31540000 ( 789.250 Mb) 3.44% 0.01%
Image 1289 0`0831a000 ( 131.102 Mb) 0.57% 0.00%
TEB 794 0`00634000 ( 6.203 Mb) 0.03% 0.00%
Other 14 0`001b7000 ( 1.715 Mb) 0.01% 0.00%
PEB 1 0`00001000 ( 4.000 kb) 0.00% 0.00%
--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_PRIVATE 5613 5`8adfb000 ( 22.170 Gb) 98.99% 0.27%
MEM_IMAGE 1822 0`0bbfa000 ( 187.977 Mb) 0.82% 0.00%
MEM_MAPPED 53 0`02c9f000 ( 44.621 Mb) 0.19% 0.00%
--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE 1144 7fa`6695c000 ( 7.978 Tb) 99.73%
MEM_RESERVE 2121 4`07c5c000 ( 16.121 Gb) 71.98% 0.20%
MEM_COMMIT 5367 1`91a38000 ( 6.276 Gb) 28.02% 0.08%
--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE 3216 1`831df000 ( 6.049 Gb) 27.01% 0.07%
PAGE_EXECUTE_READ 283 0`095c5000 ( 149.770 Mb) 0.65% 0.00%
PAGE_READONLY 846 0`03242000 ( 50.258 Mb) 0.22% 0.00%
PAGE_EXECUTE_READWRITE 143 0`00f9b000 ( 15.605 Mb) 0.07% 0.00%
PAGE_READWRITE|PAGE_GUARD 795 0`00f2b000 ( 15.168 Mb) 0.07% 0.00%
PAGE_WRITECOPY 83 0`00188000 ( 1.531 Mb) 0.01% 0.00%
PAGE_EXECUTE 1 0`00004000 ( 16.000 kb) 0.00% 0.00%
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
Free 5`c0090000 7f8`da150000 ( 7.972 Tb)
<unknown> 3`9c0ee000 0`e3fa2000 ( 3.562 Gb)
Heap 0`09a90000 0`00fd0000 ( 15.813 Mb)
Stack 0`00cf0000 0`000fc000 (1008.000 kb)
Image 7fe`fe0aa000 0`0089e000 ( 8.617 Mb)
TEB 7ff`ff7bc000 0`00002000 ( 8.000 kb)
Other 0`007f0000 0`00181000 ( 1.504 Mb)
PEB 7ff`fffd3000 0`00001000 ( 4.000 kb)
这是 !address -summary 来自第二个快照的输出
0:000> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 1129 7fa`2cad7000 ( 7.977 Tb) 99.72%
<unknown> 1520 4`4ca9a000 ( 17.198 Gb) 73.80% 0.21%
Heap 1585 1`486b3000 ( 5.132 Gb) 22.02% 0.06%
Stack 2586 0`35840000 ( 856.250 Mb) 3.59% 0.01%
Image 1275 0`0831a000 ( 131.102 Mb) 0.55% 0.00%
TEB 861 0`006ba000 ( 6.727 Mb) 0.03% 0.00%
Other 14 0`001b7000 ( 1.715 Mb) 0.01% 0.00%
PEB 1 0`00001000 ( 4.000 kb) 0.00% 0.00%
--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_PRIVATE 5978 5`c3c7d000 ( 23.059 Gb) 98.96% 0.28%
MEM_IMAGE 1810 0`0bbfa000 ( 187.977 Mb) 0.79% 0.00%
MEM_MAPPED 54 0`03ca2000 ( 60.633 Mb) 0.25% 0.00%
--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE 1129 7fa`2cad7000 ( 7.977 Tb) 99.72%
MEM_RESERVE 2218 3`ea250000 ( 15.659 Gb) 67.20% 0.19%
MEM_COMMIT 5624 1`e92c9000 ( 7.643 Gb) 32.80% 0.09%
--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE 3419 1`da924000 ( 7.415 Gb) 31.82% 0.09%
PAGE_EXECUTE_READ 283 0`095c5000 ( 149.770 Mb) 0.63% 0.00%
PAGE_READONLY 846 0`03242000 ( 50.258 Mb) 0.21% 0.00%
PAGE_READWRITE|PAGE_GUARD 862 0`01071000 ( 16.441 Mb) 0.07% 0.00%
PAGE_EXECUTE_READWRITE 148 0`00fec000 ( 15.922 Mb) 0.07% 0.00%
PAGE_WRITECOPY 65 0`0013d000 ( 1.238 Mb) 0.01% 0.00%
PAGE_EXECUTE 1 0`00004000 ( 16.000 kb) 0.00% 0.00%
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
Free 5`e2b3f000 7f8`b76a1000 ( 7.972 Tb)
<unknown> 1`a5991000 0`da6ff000 ( 3.413 Gb)
Heap 0`09a90000 0`00fd0000 ( 15.813 Mb)
Stack 0`00cf0000 0`000fc000 (1008.000 kb)
Image 7fe`fe0aa000 0`0089e000 ( 8.617 Mb)
TEB 7ff`ff7bc000 0`00002000 ( 8.000 kb)
Other 0`007f0000 0`00181000 ( 1.504 Mb)
PEB 7ff`fffd3000 0`00001000 ( 4.000 kb)
根据这些, native 堆看起来增长了 1GB。那么让我们看看 native 堆。这是第一个快照
0:000> !heap -s
LFH Key : 0x0000007b0b4a5afd
Termination on corruption : ENABLED
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-------------------------------------------------------------------------------------
Virtual block: 00000000031d0000 - 00000000031d0000 (size 0000000000000000)
Virtual block: 0000000003690000 - 0000000003690000 (size 0000000000000000)
Virtual block: 0000000024bf0000 - 0000000024bf0000 (size 0000000000000000)
Virtual block: 00000001412c0000 - 00000001412c0000 (size 0000000000000000)
Virtual block: 0000000158120000 - 0000000158120000 (size 0000000000000000)
Virtual block: 0000000102bd0000 - 0000000102bd0000 (size 0000000000000000)
Virtual block: 0000000021a50000 - 0000000021a50000 (size 0000000000000000)
Virtual block: 000000011b230000 - 000000011b230000 (size 0000000000000000)
Virtual block: 0000000073f40000 - 0000000073f40000 (size 0000000000000000)
0000000000090000 00000002 695936 693228 695936 2304 2251 47 9 e6 LFH
0000000000010000 00008000 64 4 64 1 1 1 0 0
0000000000410000 00001002 1088 952 1088 7 4 2 0 0 LFH
0000000000550000 00041002 512 8 512 3 1 1 0 0
0000000000020000 00001002 1088 1044 1088 10 5 2 0 0 LFH
00000000005e0000 00041002 512 256 512 2 2 1 0 0 LFH
0000000000b40000 00001002 1536 680 1536 4 22 2 0 0 LFH
0000000000c70000 00041002 512 8 512 3 1 1 0 0
0000000000a80000 00001002 512 8 512 3 1 1 0 0
0000000000530000 00001002 64 24 64 8 2 1 0 0
0000000001100000 00001002 355456 190148 355456 96748 658 89 0 0 LFH
External fragmentation 50 % (658 free blocks)
0000000001550000 00001002 15424 7084 15424 2921 103 7 0 2 LFH
External fragmentation 41 % (103 free blocks)
0000000005c30000 00001002 1536 608 1536 6 31 2 0 0 LFH
0000000003d00000 00001002 1536 592 1536 4 9 2 0 0 LFH
0000000003df0000 00001002 64 8 64 3 1 1 0 0
0000000003ff0000 00001002 64 8 64 3 1 1 0 0
0000000005e90000 00011002 512 108 512 20 12 1 0 1
0000000005f20000 00001002 512 8 512 3 2 1 0 0
0000000008bc0000 00001002 695936 685784 695936 410 701 47 0 5 LFH
Virtual block: 00000000116e0000 - 00000000116e0000 (size 0000000000000000)
Virtual block: 000000001c7c0000 - 000000001c7c0000 (size 0000000000000000)
0000000006580000 00001002 2703360 2700036 2703360 122093 8251 176 2 1222d LFH
0000000014730000 00001002 1088 328 1088 67 7 2 0 0 LFH
000000004fe50000 00001002 512 8 512 3 1 1 0 0
000000004fdb0000 00001002 512 8 512 3 1 1 0 0
0000000010170000 00001002 512 12 512 1 2 1 0 0
0000000058960000 00001002 512 8 512 1 3 1 0 0
00000000104e0000 00001002 512 264 512 3 5 1 0 0 LFH
-------------------------------------------------------------------------------------
这是第二张快照
0:000> !heap -s
LFH Key : 0x0000007b0b4a5afd
Termination on corruption : ENABLED
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-------------------------------------------------------------------------------------
Virtual block: 00000000031d0000 - 00000000031d0000 (size 0000000000000000)
Virtual block: 0000000003690000 - 0000000003690000 (size 0000000000000000)
Virtual block: 0000000024bf0000 - 0000000024bf0000 (size 0000000000000000)
Virtual block: 0000000158120000 - 0000000158120000 (size 0000000000000000)
Virtual block: 000000011b230000 - 000000011b230000 (size 0000000000000000)
Virtual block: 000000002d9c0000 - 000000002d9c0000 (size 0000000000000000)
Virtual block: 0000000082f60000 - 0000000082f60000 (size 0000000000000000)
Virtual block: 00000000273a0000 - 00000000273a0000 (size 0000000000000000)
Virtual block: 0000000073e90000 - 0000000073e90000 (size 0000000000000000)
0000000000090000 00000002 857856 847980 857856 3491 2443 57 9 145 LFH
0000000000010000 00008000 64 4 64 1 1 1 0 0
0000000000410000 00001002 1088 952 1088 7 4 2 0 0 LFH
0000000000550000 00041002 512 8 512 3 1 1 0 0
0000000000020000 00001002 1088 1044 1088 10 5 2 0 0 LFH
00000000005e0000 00041002 512 256 512 2 2 1 0 0 LFH
0000000000b40000 00001002 1536 780 1536 7 26 2 0 0 LFH
0000000000c70000 00041002 512 8 512 3 1 1 0 0
0000000000a80000 00001002 512 8 512 3 1 1 0 0
0000000000530000 00001002 64 24 64 8 2 1 0 0
0000000001100000 00001002 355456 190148 355456 96735 658 89 0 0 LFH
External fragmentation 50 % (658 free blocks)
0000000001550000 00001002 15424 7084 15424 2915 97 7 0 2 LFH
External fragmentation 41 % (97 free blocks)
0000000005c30000 00001002 1536 616 1536 9 33 2 0 0 LFH
0000000003d00000 00001002 1536 592 1536 4 9 2 0 0 LFH
0000000003df0000 00001002 64 8 64 3 1 1 0 0
0000000003ff0000 00001002 64 8 64 3 1 1 0 0
0000000005e90000 00011002 512 108 512 20 13 1 0 9
0000000005f20000 00001002 512 8 512 3 2 1 0 0
0000000008bc0000 00001002 857856 852992 857856 426 745 57 0 5 LFH
Virtual block: 00000000116e0000 - 00000000116e0000 (size 0000000000000000)
Virtual block: 00000000124b0000 - 00000000124b0000 (size 0000000000000000)
Virtual block: 000000011bd10000 - 000000011bd10000 (size 0000000000000000)
0000000006580000 00001002 3237696 3221472 3237696 150399 9556 209 3 1b6e4 LFH
0000000014730000 00001002 1088 328 1088 67 7 2 0 0 LFH
000000004fe50000 00001002 512 8 512 3 1 1 0 0
000000004fdb0000 00001002 512 8 512 3 1 1 0 0
0000000010170000 00001002 512 12 512 1 2 1 0 0
0000000058960000 00001002 512 8 512 1 3 1 0 0
0000000010430000 00001002 512 264 512 3 5 1 0 0 LFH
-------------------------------------------------------------------------------------
如果我正确读取此数据,堆 @ 0000000006580000 的内存大小增加最多。让我们仔细看看这个堆
再次为第一个快照
0:000> !heap -stat -h 0000000006580000
heap @ 0000000006580000
group-by: TOTSIZE max-display: 20
size #blocks total ( %) (percent of total busy bytes)
2c48 1 - 2c48 (26.79)
280 c - 1e00 (18.15)
c0 22 - 1980 (15.43)
38 40 - e00 (8.47)
30 40 - c00 (7.26)
40 19 - 640 (3.78)
18 32 - 4b0 (2.84)
20 25 - 4a0 (2.80)
428 1 - 428 (2.51)
12 2d - 32a (1.91)
328 1 - 328 (1.91)
8 58 - 2c0 (1.66)
c 2d - 21c (1.28)
d8 2 - 1b0 (1.02)
1c a - 118 (0.66)
3e 4 - f8 (0.59)
3c 4 - f0 (0.57)
d0 1 - d0 (0.49)
bc 1 - bc (0.44)
b8 1 - b8 (0.43)
这是它寻找第二张快照的样子
heap @ 0000000006580000
group-by: TOTSIZE max-display: 20
size #blocks total ( %) (percent of total busy bytes)
2c48 1 - 2c48 (26.80)
280 c - 1e00 (18.16)
c0 22 - 1980 (15.44)
38 40 - e00 (8.47)
30 40 - c00 (7.26)
40 19 - 640 (3.78)
18 32 - 4b0 (2.84)
20 25 - 4a0 (2.80)
428 1 - 428 (2.52)
328 1 - 328 (1.91)
12 2c - 318 (1.87)
8 58 - 2c0 (1.66)
c 2d - 21c (1.28)
d8 2 - 1b0 (1.02)
1c a - 118 (0.66)
3e 4 - f8 (0.59)
3c 4 - f0 (0.57)
d0 1 - d0 (0.49)
bc 1 - bc (0.44)
b8 1 - b8 (0.44)
这是查找内存泄漏原因的正确方法吗,因为我没有看到 % of busy bytes 的变化匹配,这可以解释这个特定堆的内存增加约 0.5GB?另外,我如何确定此堆中包含哪些对象/模块以及谁在进行分配?
最佳答案
因为你可以拍摄快照,我建议使用 UMDH它是与 WinDbg 一起的调试器工具集的一部分。那里有很多教程/示例,但基本流程如下所示:
启用堆栈跟踪日志记录:
gflags.exe -i processName.exe +ust
运行进程,并记下进程 ID(在任务管理器中)
获取第一个内存快照(将 1234 替换为进程 ID)
umdh.exe -p:1234 -f:mem1.txt
让进程运行一段时间(并泄漏内存)
生成第二个快照
umdh.exe -p:1234 -f:mem2.txt
创建包含大小和堆栈跟踪的报告
umdh.exe mem1.txt mem2.txt >mem_compare.txt
为您的进程禁用堆栈跟踪
gflags.exe -i processName.exe -ust
报告看起来像这样:
+ a556ae5 ( a556ae5 - 0) 7 allocs BackTraceC0E
+ 7 ( 7 - 0) BackTraceC0E allocations
ntdll!RtlLogStackBackTrace+00000007
ntdll!RtlAllocateHeap+0000023A
ntdll!RtlDebugAllocateHeap+000000B5
ntdll!RtlpAllocateHeap+000000C4
ntdll!RtlAllocateHeap+0000023A
ntdll!LdrpTagAllocateHeap+00000025
ntdll!LdrpTagAllocateHeap29+00000015
processName!malloc+00000016
processName!createLotsOfObjects+00000712
...
这表明,在两个快照之间,使用此堆栈跟踪分配了约 170 兆(0xa55ae5 字节)的内存。
关于c# - 托管应用程序中的非托管内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950233/
在 Windows 世界中,什么是正确的名称。具有导出函数的老式 C++ DLL?不是 COM DLL,也不是 .NET DLL。我们以前通过调用 LoadLibrary() 和 GetProcAdd
目前我正在使用javaEE7,我有一个场景如下。在我的 JSF Web 应用程序中,我有一个事件监听器(不是 JSF 事件),当事件调用时,它会执行某些操作,然后将这些信息更新到我的 Web 应用程序
这不是 AJAX 请求/响应回调问题... 我正在使用 Dojo 1.5 构建网格。我正在尝试 dojo.connect具有功能的扩展/收缩按钮。我的问题是 grid.startup()在创建实际 D
非 Webkit Opera 是 very specific在某些功能中,因此通常通过 JavaScript 检测到 the following way . 但是,Opera Next 几乎是 Goo
我已查看以下链接中给出的所有日志,但未能找到 IP 地址: https://developer.couchbase.com/documentation/server/3.x/admin/Misc/Tr
我有一个命令行程序,它根据一组源文件生成一个我想在我的 Android gradle 构建 (A) 中使用的 jar 文件。这个命令行程序只是将一个 jar 文件存储在磁盘上的一个目录中。 我如何创建
下面的 htaccess 命令将所有非 www 转移到 http www RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^
我正在使用自定义链接器脚本将内核镜像分为两部分。第一个是普通代码和数据,第二个是初始化代码和不再需要时将被丢弃的数据。初始化部分也不像内核本身那样在地址空间之间共享,因此如果 fork() 仍然存在(
这个问题在这里已经有了答案: Several unary operators in C and C++ (3 个答案) What is the "-->" operator in C++? (29
假设我有一个类设置如下: class A { public: virtual void foo() { printf("default implementation\n"); } }; c
#include using namespace std; int main(int argc, char *argv[]) { int i=-5; while(~(i)) {
近期,百度搜索引擎变化无常,很多企业站、行业站、门户站、论坛等站点遭到了降权,特别是比比贴分类信息网直接遭到了拔毛,这对于广大站长来说是一种打击,也是各个企业、行业的打击。 至今,很多网站已经恢复
我现在正在使用 IBM TPM v1332 + IBM TSS v1470 并尝试将一些基本关键字/密码存储到 TPM 上的非 volatile 内存中。我找到了两种方法。一种是创建一个密封对象并使用
我的 PHP 脚本中有一个正则表达式,如下所示: /(\b$term|$term\b)(?!([^)/iu 这与 $term 中包含的单词匹配,只要前后有单词边界并且它不在 HTML 标记内即可。 但
我想显示用户名称地址(请参阅 www.ipchicken.com ),但我唯一能找到的是 IP 地址。我尝试了反向查找,但也没有用: IPAddress ip = IPAddress.Parse(th
只有 UI 线程能够显示到屏幕上,还是其他线程也可以这样做? 最佳答案 不,您只能直接从 UI 线程访问 UI,但您可以编码来自其他线程的结果,例如使用 Control.Invoke 或 contro
我正在使用现代 Excel 滚动条(不是旧的 ActiveX 类型,即开发人员 > 插入 > 表单控件 > 滚动条)并且想检测它的值何时更改。我找不到有关此类对象的更改事件的任何信息。您可以在单击时分
当我使用这段代码时 IE 6 确实正确使用了指定的样式表,但所有其他浏览器在应该使用基本上声明的样式表时会忽略这两种样式表,如果您不是 IE,请使用此样式表。 有什么想法吗? 最佳答案 n
我想指定 2 mssql 表之间的关系。 付款类别和付款。 paymentcategory.id 加入 payout.category 列。 在 payout.json 模型中 我指定为外键:id,
我正在尝试制作非 volatile UDF,但似乎不可能。因此,这是我非常简单的test-UDF: Option Explicit Dim i As Integer Sub Main() i = 0
我是一名优秀的程序员,十分优秀!