zoukankan      html  css  js  c++  java
  • 内存暴增排查分析

    一次偶然间,发现测试环境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

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

  • 相关阅读:
    看了前辈缠中说禅及其反响,忍不住想说些东西
    利弗莫尔的操盘精华篇
    缠中说禅:教你炒股票108课(转载)
    评温斯坦的炒股书(非常重要,常看看)
    本散女2
    使用PHP-GTK编写一个windows桌面应用程序
    php.exe php-cgi.exe php-win.exe的区别
    php调试利器之phpdbg
    yaf框架安装配置
    phalcon框架安装
  • 原文地址:https://www.cnblogs.com/123qq/p/15222442.html
Copyright © 2011-2022 走看看