内存暴增排查分析

一次偶然间,发现测试环境iis站点内存突然间暴增,平常都是300M,这次一下子暴增到8g 于是就开始了接下来的分析

发现Dictionary居然有1.78g懵逼

  windbg 分析

1. 看看当前进程的 commit 内存有多大

0:000> !address -summary                          
Mapping file section regions...
Mapping module regions...
Mapping PEB regions...
Mapping TEB and stack regions...
Mapping heap regions...
Mapping page heap regions...
Mapping other regions...
Mapping stack trace database regions...
Mapping activation context regions...

--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free                                    402     7df9`8ed48000 ( 125.975 TB)           98.42%
<unknown>                              1239      206`619ca000 (   2.025 TB)  99.99%    1.58%
Image                                  1833        0`0b792000 ( 183.570 MB)   0.01%    0.00%
Heap                                     36        0`02cdf000 (  44.871 MB)   0.00%    0.00%
Stack                                   111        0`01240000 (  18.250 MB)   0.00%    0.00%
Other                                    13        0`001e2000 (   1.883 MB)   0.00%    0.00%
TEB                                      37        0`0004a000 ( 296.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_MAPPED                              326      200`00c57000 (   2.000 TB)  98.76%    1.56%
MEM_PRIVATE                            1111        6`64ebf000 (  25.577 GB)   1.23%    0.02%
MEM_IMAGE                              1833        0`0b792000 ( 183.570 MB)   0.01%    0.00%

--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE                                402     7df9`8ed48000 ( 125.975 TB)           98.42%
MEM_RESERVE                             431      205`5900d000 (   2.021 TB)  99.79%    1.58%
MEM_COMMIT                             2839        1`1829b000 (   4.378 GB)   0.21%    0.00%

--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE                          978        1`08d1c000 (   4.138 GB)   0.20%    0.00%
PAGE_EXECUTE_READ                       308        0`07428000 ( 116.156 MB)   0.01%    0.00%
PAGE_READONLY                          1061        0`0487b000 (  72.480 MB)   0.00%    0.00%
PAGE_NOACCESS                           139        0`02909000 (  41.035 MB)   0.00%    0.00%
PAGE_EXECUTE_READWRITE                   41        0`00a6f000 (  10.434 MB)   0.00%    0.00%
PAGE_WRITECOPY                          273        0`004cf000 (   4.809 MB)   0.00%    0.00%
PAGE_READWRITE|PAGE_GUARD                37        0`00071000 ( 452.000 kB)   0.00%    0.00%
PAGE_EXECUTE_WRITECOPY                    2        0`00024000 ( 144.000 kB)   0.00%    0.00%

--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
Free                                    18b`42fc0000     7c69`2df10000 ( 124.411 TB)
<unknown>                              7dfb`9b527000      1f9`b0c13000 (   1.975 TB)
Image                                   18a`10662000        0`00d7d000 (  13.488 MB)
Heap                                    18a`13631000        0`00f5e000 (  15.367 MB)
Stack                                    44`0acd0000        0`0007b000 ( 492.000 kB)
Other                                   185`c4a60000        0`00181000 (   1.504 MB)
TEB                                      44`0ae08000        0`00002000 (   8.000 kB)
PEB                                      44`0afac000        0`00001000 (   4.000 kB)

 可以看出大概占了 4.378G,接下来再看看托管堆内存。

0:000> !eeheap -gc
Number of GC Heaps: 4
------------------------------
Heap 0 (00000185C55B4F90)
generation 0 starts at 0x00000185C6C45838
generation 1 starts at 0x00000185C6C3DC88
generation 2 starts at 0x00000185C5CB1000
ephemeral segment allocation context: none
         segment             begin         allocated              size
00000185C5CB0000  00000185C5CB1000  00000185C6EB1850  0x1200850(18876496)
Large object heap starts at 0x00000189C5CB1000
         segment             begin         allocated              size
00000189C5CB0000  00000189C5CB1000  00000189D435D6F0  0xe6ac6f0(241878768)
0000018580000000  0000018580001000  00000185ADC5CD08  0x2dc5bd08(767933704)
0000018AE2FC0000  0000018AE2FC1000  0000018B3E878BC8  0x5b8b7bc8(1535867848)
Heap Size:       Size: 0x98dc0810 (2564556816) bytes.
------------------------------
Heap 1 (00000185C56835E0)
generation 0 starts at 0x00000186C6C263D8
generation 1 starts at 0x00000186C6C18578
generation 2 starts at 0x00000186C5CB1000
ephemeral segment allocation context: none
         segment             begin         allocated              size
00000186C5CB0000  00000186C5CB1000  00000186C7293328  0x15e2328(22946600)
Large object heap starts at 0x00000189D5CB1000
         segment             begin         allocated              size
00000189D5CB0000  00000189D5CB1000  00000189D5F53350  0x2a2350(2761552)
Heap Size:       Size: 0x1884678 (25708152) bytes.
------------------------------
Heap 2 (00000185C5576960)
generation 0 starts at 0x00000187C6C3B2A0
generation 1 starts at 0x00000187C6C334E0
generation 2 starts at 0x00000187C5CB1000
ephemeral segment allocation context: none
         segment             begin         allocated              size
00000187C5CB0000  00000187C5CB1000  00000187C768E0D8  0x19dd0d8(27119832)
Large object heap starts at 0x00000189E5CB1000
         segment             begin         allocated              size
00000189E5CB0000  00000189E5CB1000  00000189F326E728  0xd5bd728(224122664)
Heap Size:       Size: 0xef9a800 (251242496) bytes.
------------------------------
Heap 3 (00000185C557E9B0)
generation 0 starts at 0x00000188C6F71D30
generation 1 starts at 0x00000188C6F4F758
generation 2 starts at 0x00000188C5CB1000
ephemeral segment allocation context: none
         segment             begin         allocated              size
00000188C5CB0000  00000188C5CB1000  00000188C7543728  0x1892728(25765672)
Large object heap starts at 0x00000189F5CB1000
         segment             begin         allocated              size
00000189F5CB0000  00000189F5CB1000  00000189F5D310C0  0x800c0(524480)
0000018AB2FC0000  0000018AB2FC1000  0000018AE0C1CD08  0x2dc5bd08(767933704)
0000018A14590000  0000018A14591000  0000018A2B3BEF20  0x16e2df20(383967008)
Heap Size:       Size: 0x4639c410 (1178190864) bytes.
------------------------------
GC Heap Size:    Size: 0xef97ba98 (4019698328) bytes.

 查看托管堆

0:000> !dumpheap -stat 0000018AE2FC1000 0000018B3E878BC8
Statistics:
              MT    Count    TotalSize Class Name
00000185c56d3570        1           30      Free
00007ffb0720ee48        1   1535867816 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total 2 objects


0:000> !dumpheap -mt 00007ffb0720ee48 0000018AE2FC1000 0000018B3E878BC8
         Address               MT     Size
0000018ae2fc1020 00007ffb0720ee48 1535867816     

Statistics:
              MT    Count    TotalSize Class Name
00007ffb0720ee48        1   1535867816 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total 1 objects

0:000> !DumpHeap /d -mt 00007ffb0720ee48
         Address               MT     Size
00000185c6a56ac8 00007ffb0720ee48      616     
0000018580001020 00007ffb0720ee48 767933672     
0000018ae2fc1020 00007ffb0720ee48 1535867816     
00000188c6da9e30 00007ffb0720ee48      296     
0000018ab2fc1020 00007ffb0720ee48 767933672     

Statistics:
              MT    Count    TotalSize Class Name
00007ffb0720ee48        5   3071736072 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total 5 objects
Fragmented blocks larger than 0.5 MB:
            Addr     Size      Followed by
00000185C6AE9878    0.6MB         00000185C6B8CAA8 System.Byte[]
00000186C6E723F0    4.1MB         00000186C72912D8 System.Byte[]
00000187C715B2B8    5.2MB         00000187C768C088 System.Byte[]
00000188C6E2E7D8    0.6MB         00000188C6ED1A08 System.Byte[]



0:000> !gcroot 0000018ae2fc1020
Thread be58:
    000000440BF3B6C0 00007FFAAAE74E00 Xw.Service.ProductCategoryService.GetParentCategoryId(Int32, System.Collections.Generic.Dictionary`2<Int32,Int32>, Int32 ByRef)
        rdi: 
            ->  00000185C6A64458 System.Collections.Generic.Dictionary`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]]
            ->  0000018AE2FC1020 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]


看到这行代价就大概知道是什么问题了,果断查询项目文件,才发现,这个方法是一个递归方法。因为数据的原因导致出现了无限递归,所以导致 System.Int32 和System.Collections.Generic.Dictionary 都很高

非常感谢博客园里面的大佬

https://www.cnblogs.com/huangxincheng/p/14830664.html

也是按照他的来一步步分析的。

posted @ 2021-09-03 12:00  木头马尾、、、  阅读(641)  评论(0编辑  收藏  举报