In order to debug any high memory issue we rely heavily on the output of !address –summary command
[You’ll find !address –summary as the part of Ext.dll extension].
We can interpret quite a few things from it which can help us in further debugging. Here’s how
For example (for 32 bit app)
0:027> !address –summary
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
29b32000 ( 683208) : 32.58% 41.98% : RegionUsageIsVAD
1cab1000 ( 469700) : 22.40% 00.00% : RegionUsageFree
d3b4000 ( 216784) : 10.34% 13.32% : RegionUsageImage
3bfc000 ( 61424) : 02.93% 03.77% : RegionUsageStack
f0000 ( 960) : 00.05% 00.06% : RegionUsageTeb
2896a000 ( 665000) : 31.71% 40.86% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
1000 ( 4) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: 7fff0000 (2097088 KB) Busy: 6353f000 (1627388 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
1cab1000 ( 469700) : 22.40% : <free>
119a8000 ( 288416) : 13.75% : MEM_IMAGE
10b5000 ( 17108) : 00.82% : MEM_MAPPED
50ae2000 ( 1321864) : 63.03% : MEM_PRIVATE
------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
3152f000 ( 808124) : 38.54% : MEM_COMMIT
1cab1000 ( 469700) : 22.40% : MEM_FREE
32010000 ( 819264) : 39.07% : MEM_RESERVE Largest free region: Base 6b0b2000 - Size 0203e000 (33016 KB) *
From above output
RegionUsageIsVAD |
.Net make allocations in this region [682 MB] |
We have use !dumpheap –stat or !eeheap –gc to get to know actual GC heap size. !dumpheap –stat:: Total 384,371 objects, Total size: 700,942,864 !eeheap –gc:: You can also use .Net memory analyzer script written by Tess |
RegionUsageFree |
Actual free space out of 2 GB usermode [269 MB] |
If you see large memory in this region but small value of Largest contiguous block that indicates memory is fragmented. |
RegionUsageImage |
Region where Dll’s/modules get loaded [216 Mb] |
Either heavy dll’s loaded / Debug is set true / Dynamic Assemblies due to XML serialization |
RegionUsageHeap |
Native/Umanaged allocations here [665 MB] |
Use the DebugDiag memory analysis script on the existing dump file to get more information on the heaps. A DebugDiag leak rule can be used while the process is running to collect data on the allocations. Please see the following:
|
Looking at State Summary we can get to know where exactly 2Gb has ended up
MEM_COMMIT [Actual process size] + MEM_FREE[same as RegionUsageFree] + MEM_RESERVE == 2 GB usermode space == Tot: 7fff0000 (2097088 KB) |
MEM_COMMIT [Actual process size] + MEM_RESERVE == Busy bytes == Busy: 6353f000 (1627388 KB) |
Following is the output of !address -summary under different conditions i.e when application is running on different platforms[32 bit/64 bit]:
1) When app is in 32 bit mode [windows 2003]
0:027> !address -summary
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
29b32000 ( 683208) : 32.58% 41.98% : RegionUsageIsVAD
1cab1000 ( 469700) : 22.40% 00.00% : RegionUsageFree
d3b4000 ( 216784) : 10.34% 13.32% : RegionUsageImage
3bfc000 ( 61424) : 02.93% 03.77% : RegionUsageStack
f0000 ( 960) : 00.05% 00.06% : RegionUsageTeb
2896a000 ( 665000) : 31.71% 40.86% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
1000 ( 4) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: 7fff0000 (2097088 KB) Busy: 6353f000 (1627388 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
1cab1000 ( 469700) : 22.40% : <free>
119a8000 ( 288416) : 13.75% : MEM_IMAGE
10b5000 ( 17108) : 00.82% : MEM_MAPPED
50ae2000 ( 1321864) : 63.03% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
3152f000 ( 808124) : 38.54% : MEM_COMMIT
1cab1000 ( 469700) : 22.40% : MEM_FREE
32010000 ( 819264) : 39.07% : MEM_RESERVE
Largest free region: Base 6b0b2000 - Size 0203e000 (33016 KB)
Max available memory in usermode would be 2 GB[2097088 KB]
2) When app is on 32 bit mode with /3gb switch [windows 2003]
0:000> !address -summary
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
3447b000 ( 856556) : 27.23% 49.95% : RegionUsageIsVAD
5753e000 ( 1430776) : 45.48% 00.00% : RegionUsageFree
109cb000 ( 272172) : 08.65% 15.87% : RegionUsageImage
e3d000 ( 14580) : 00.46% 00.85% : RegionUsageStack
39000 ( 228) : 00.01% 00.01% : RegionUsageTeb
22df4000 ( 571344) : 18.16% 33.32% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: bfff0000 (3145664 KB) Busy: 68ab2000 (1714888 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
5753e000 ( 1430776) : 45.48% : <free>
1267d000 ( 301556) : 09.59% : MEM_IMAGE
808000 ( 8224) : 00.26% : MEM_MAPPED
55c2d000 ( 1405108) : 44.67% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
41ac2000 ( 1075976) : 34.21% : MEM_COMMIT
5753e000 ( 1430776) : 45.48% : MEM_FREE
26ff0000 ( 638912) : 20.31% : MEM_RESERVE
Largest free region: Base 88010000 - Size 37ef9000 (916452 KB)
Total available would be 3 GB(3145664 KB)
3) When app is in 32 bit mode on x64 box[windows 2003]
0:000> !address -summary
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
21290000 ( 543296) : 12.95% 24.52% : RegionUsageIsVAD
78bc5000 ( 1978132) : 47.16% 00.00% : RegionUsageFree
ad14000 ( 177232) : 04.23% 08.00% : RegionUsageImage
25fc000 ( 38896) : 00.93% 01.76% : RegionUsageStack
0 ( 0) : 00.00% 00.00% : RegionUsageTeb
58e89000 ( 1456676) : 34.73% 65.73% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: ffff0000 (4194240 KB) Busy: 8742b000 (2216108 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
78bc5000 ( 1978132) : 47.16% : <free>
c7a8000 ( 204448) : 04.87% : MEM_IMAGE
b74000 ( 11728) : 00.28% : MEM_MAPPED
7a10f000 ( 1999932) : 47.68% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
46049000 ( 1147172) : 27.35% : MEM_COMMIT
78bc5000 ( 1978132) : 47.16% : MEM_FREE
413e2000 ( 1068936) : 25.49% : MEM_RESERVE
Largest free region: Base b0010000 - Size 4fd80000 (1308160 KB)
Max we would have under this condition is 4 GB of usermode space
4) When app is on 64 bit mode on 64 bit box [windows 2003]
0:014> !address -summary
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
145d58000 ( 5338464) : 00.06% 89.85% : RegionUsageIsVAD
7fe95589000 (8583992868) : 99.93% 00.00% : RegionUsageFree
10e53000 ( 276812) : 00.00% 04.66% : RegionUsageImage
2100000 ( 33792) : 00.00% 00.57% : RegionUsageStack
84000 ( 528) : 00.00% 00.01% : RegionUsageTeb
11d35000 ( 292052) : 00.00% 04.92% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
1000 ( 4) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: 7ffffff0000 (8589934528 KB) Busy: 000000016aa67000 (5941660 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
7fe95589000 (8583992868) : 99.93% : <free>
12fcc000 ( 311088) : 00.00% : MEM_IMAGE
8fc000 ( 9200) : 00.00% : MEM_MAPPED
15719f000 ( 5621372) : 00.07% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
6eb9d000 ( 1814132) : 00.02% : MEM_COMMIT
7fe95589000 (8583992868) : 99.93% : MEM_FREE
fbeca000 ( 4127528) : 00.05% : MEM_RESERVE
Largest free region: Base 0000000516fc5000 - Size 0000063d2589b000 (6698918508 KB)
Max available would be 8 terabyte [usermode] + 8 terabyte[kernelmode] = 16 TB
All the of above scenarios explaining memory availability goes in line with Tom’s blog
32-bit OS |
64-bit OS |
|
32-bit process |
2 GB |
4 GB |
32-bit process with /3GB |
3 GB |
N/A |
64-bit process |
N/A |
16 TB |
These process numbers are contingent on how much RAM and disk space you have, so if you have 4 GB of RAM and 4 GB Pagefile,
the total memory of all running processes can’t be greater then 8 GB.
Happy Debugging!
Author: jaskis
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.