如何理解windbg的内存转储?
我们的一个网站正在使用2gb内存,我们正在试图理解为什么它会使用这么多内存(因为我们正试图将此网站推到azure,因为大内存使用意味着azure的账单会更高) 我获取了一个IIS转储,从任务管理器中,我可以看到它使用了2.2GB内存。 然后我运行如何理解windbg的内存转储?,windbg,Windbg,我们的一个网站正在使用2gb内存,我们正在试图理解为什么它会使用这么多内存(因为我们正试图将此网站推到azure,因为大内存使用意味着azure的账单会更高) 我获取了一个IIS转储,从任务管理器中,我可以看到它使用了2.2GB内存。 然后我运行!地址-摘要这是我得到的: --- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal Free
!地址-摘要
这是我得到的:
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free 913 7fb`2f5ce000 ( 7.981 Tb) 99.76%
<unknown> 4055 4`a49c9000 ( 18.572 Gb) 96.43% 0.23%
Heap 338 0`1dbd1000 ( 475.816 Mb) 2.41% 0.01%
Image 3147 0`0c510000 ( 197.063 Mb) 1.00% 0.00%
Stack 184 0`01d40000 ( 29.250 Mb) 0.15% 0.00%
Other 14 0`001bf000 ( 1.746 Mb) 0.01% 0.00%
TEB 60 0`00078000 ( 480.000 kb) 0.00% 0.00%
PEB 1 0`00001000 ( 4.000 kb) 0.00% 0.00%
--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_PRIVATE 2206 4`ba7d2000 ( 18.914 Gb) 98.20% 0.23%
MEM_IMAGE 5522 0`148b0000 ( 328.688 Mb) 1.67% 0.00%
MEM_MAPPED 71 0`019a0000 ( 25.625 Mb) 0.13% 0.00%
--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE 913 7fb`2f5ce000 ( 7.981 Tb) 99.76%
MEM_RESERVE 2711 4`378f4000 ( 16.868 Gb) 87.58% 0.21%
MEM_COMMIT 5088 0`9912e000 ( 2.392 Gb) 12.42% 0.03%
--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE 1544 0`81afb000 ( 2.026 Gb) 10.52% 0.02%
PAGE_EXECUTE_READ 794 0`0f35d000 ( 243.363 Mb) 1.23% 0.00%
PAGE_READONLY 2316 0`05ea8000 ( 94.656 Mb) 0.48% 0.00%
PAGE_EXECUTE_READWRITE 279 0`020f4000 ( 32.953 Mb) 0.17% 0.00%
PAGE_WRITECOPY 92 0`0024f000 ( 2.309 Mb) 0.01% 0.00%
PAGE_READWRITE|PAGE_GUARD 61 0`000e6000 ( 920.000 kb) 0.00% 0.00%
PAGE_EXECUTE 2 0`00005000 ( 20.000 kb) 0.00% 0.00%
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
Free 5`3fac0000 7f9`59610000 ( 7.974 Tb)
<unknown> 3`06a59000 0`f9067000 ( 3.891 Gb)
Heap 0`0f1c0000 0`00fd0000 ( 15.813 Mb)
Image 7fe`fe767000 0`007ad000 ( 7.676 Mb)
Stack 0`01080000 0`0007b000 ( 492.000 kb)
Other 0`00880000 0`00183000 ( 1.512 Mb)
TEB 7ff`ffe44000 0`00002000 ( 8.000 kb)
PEB 7ff`fffdd000 0`00001000 ( 4.000 kb)
——使用摘要-------------------RgnCount----------总大小---------busy%占总大小的%
免费913 7fb`2f5ce000(7.981 Tb)99.76%
4055 4`a49c9000(18.572 Gb)96.43%0.23%
堆338 0`1dbd1000(475.816 Mb)2.41%0.01%
图像3147 0`0c510000(197.063 Mb)1.00%0.00%
堆栈1840`01d40000(29.250 Mb)0.15%0.00%
其他140001BF000(1746MB)0.01%0.00%
TEB 60 0`00078000(480.000 kb)0.00%0.00%
PEB10`000011000(4000KB)0.00%0.00%
---类型摘要(对于忙碌)---RGN帐户------------总大小----------总线的百分比占总大小的百分比
MEM_PRIVATE 2206 4`ba7d2000(18.914 Gb)98.20%0.23%
MEM_图像5522 0`148b0000(328.688 Mb)1.67%0.00%
MEM_映射71 0`019万(25.625 Mb)0.13%0.00%
---状态摘要-------------------RGN帐户----------总大小---------BUSY的百分比占总大小的百分比
MEM_FREE 913 7fb`2f5ce000(7.981 Tb)99.76%
MEM_RESERVE 2711 4`378f4000(16.868GB)87.58%0.21%
MEM_COMMIT 5088 0`9912e000(2.392 Gb)12.42%0.03%
---保护摘要(用于提交)-RGN帐户-----------总大小---------Busy%占总大小的%
页面读写1544 0`81afb000(2.026 Gb)10.52%0.02%
页面执行读取7940`0f35d000(243.363 Mb)1.23%0.00%
页面只读2316 0`05ea8000(94.656 Mb)0.48%0.00%
页面执行读写279 0`020f4000(32.953 Mb)0.17%0.00%
页面写入副本92 0`0024f000(2.309MB)0.01%0.00%
页面读写页面保护61 0`000e6000(920.000 kb)0.00%0.00%
第2页执行0`00005000(20.000 kb)0.00%0.00%
---按使用情况划分的最大区域-----------基址------区域大小----------
免费5`3fac0000 7f9`59610000(7.974 Tb)
3`06a59000 0`f9067000(3.891 Gb)
堆0`0f1c0000 0`00fd0000(15.813 Mb)
图像7fe`fe767000 0`007ad000(7.676 Mb)
堆栈0`01080000`0007b000(492000 kb)
其他0`00880000`00183000(1.512 Mb)
TEB 7ff`ffe44000`000020000(8000 kb)
PEB 7ff`fffdd000`000011000(4.000 kb)
有很多东西我真的不明白:
内存管理器使用的虚拟内存量,例如.NET或直接调用VirtualAlloc()
即使19 GB大于8 GB,也不一定意味着内存已交换到磁盘。这取决于内存的状态。查看MEM_RESERVE
,我们发现其中大部分尚未投入使用。因此,您的应用程序可能仍然具有良好的性能
任务管理器显示,私有内存工作集的大小类似于2.2GB,但如果我将堆、映像和堆栈加在一起,它只有700MB左右,那么剩余的1.5GB内存在哪里?或者我完全读取了错误的输出
其余部分在
中,因此任务管理器显示的总和甚至超过2.2 GB。工作集大小指示进程使用了多少物理RAM。理想情况下,一切都在RAM中,因为RAM是最快的。但RAM是有限的,并不是所有的应用程序都适合RAM。因此,不经常使用的内存被交换到磁盘,这减少了物理RAM的使用,从而减少了工作集的大小。64位应用程序在win8之前有8TB的虚拟内存,更高版本为128TB,这就是为什么您会看到这么大的数字。使用Analyzer分析dmp的内存使用情况,这比WindBG更容易。谢谢,我现在明白了。此外,1.5GB可以在管理堆-gc中找到。