.net内存泄露问题分析

一、问题背景

       最近在对客户采集服务优化的时候,无意间点开客户服务器上另外一个我们的小的采集服务,发现一堆错误日志,一直在报“OutOf memory”错误,查看服务占用内存1.7G,基本上在崩溃的边缘了(Win32程序),于是就安排下面的人先用WinDBG分析一下内存问题,因为WinDBG也是去年刚开始用,对简单的内存过高、CPU过高能简单分析一下,也是想通过这个机会锻炼一下下面的人员。按正常来说这个小采集服务下面挂的设备并不多,内存不应该占用这么大,我们的Socket服务端接受到Socket客户端连接请求后会将连接以对象形式保存,收到的数据会先放到队列中,由另外一个线程进行保存,第一感觉是处理不过来,导致内存堆积。

二、初步结论

      第二天下面人员给我汇报的通过!dumpheap -stat查看的结果是队列中倒是不大,但是有一部分Free状态的占了1.2G左右

734342a8     4763        57156 System.Int32
7347eb24     4936        59232 System.Threading.Overlapped
6f31bca4     1051        71468 System.Data.DataRow
03bc8e94     1051        75672 SunElecFlowService.MemLib.MemMeterObject
7295c3a4     4771        76336 System.Net.CallbackClosure
72976b2c     4854        77664 System.Net.IPEndPoint
72977e50     4769        95380 System.Net.SafeNativeOverlapped
72977fcc     4772        95440 System.Net.SafeCloseSocket+InnerSafeCloseSocket
73432788     1386       114036 System.Object[]
7295b5c0     4769       114456 System.Net.Sockets.OverlappedCache
729780c4     4774       114576 System.Net.SafeCloseSocket
7347c3d8     4858       136008 System.UInt16[]
008ba934      231       142356 Sun.LogLib.LogInfo[]
7295af40     4771       152672 System.Net.Sockets.Socket+CacheSet
7347e278     4788       153216 System.AsyncCallback
7293910c     4857       194280 System.Net.IPAddress
73439814       12       196752 System.DateTime[]
048e7234     4770       228960 Sun.SocketHelper.Session
7343e634     4964       317696 System.Threading.OverlappedData
03bc8b44     1051       353136 SunElecFlowService.Model.Meters
73434ec0      549       355968 System.Collections.Hashtable+bucket[]
73436bf0     9314       409816 System.Threading.ExecutionContext
73432d74      411       426836 System.String[]
72976ad0     4774       439208 System.Net.Sockets.Socket
7295b7ac     4533       453300 System.Net.Sockets.OverlappedAsyncResult
008b9418    20005       640160 Sun.LogLib.LogInfo
734395fc       20       655600 System.Decimal[]
7343426c      590       809640 System.Int32[]
6f30b160     7408      1037120 System.Data.SqlClient._SqlMetaData
734324e4    90972     15123324 System.String
73435c40    11568    314405813 System.Byte[]
00a2e3a8     6998   1443884320      Free

  上面只列出了一部分,可以看到Free确实占到了1.2G左右,这就比较奇怪了,按正常来说这部分应该可以继续使用的,为何会溢出,又翻看了一下代码,初步发现了一些问题:1、接收Socket连接时,缓冲区的大小初始定的是64K 2、未处理无效的连接对象。

三、最终结论

       于是网上根据 Free dumpheap查询相关关键词,找到了一篇博文记一次 .NET 某电商定向爬虫 内存碎片化分析,博主的关于WinDBG的文章之前看过,也关注过公众号,通过查看,确实与我们的现象比较类似,按博主推断,是由于一些对象未及时释放,导致同一个GC段中的对象未释放,分析如下:

!dumpheap 5d830000 5e82e73c
 Address       MT     Size
5d831000 00a2e3a8     6986 Free
5d832b4c 73435c40    65548     
5d842b58 00a2e3a8    11854 Free
5d8459a8 73435c40    65548     
5d8559b4 73435c40    65548     
5d8659c0 008b9418       32     
5d8659e0 00a2e3a8     7582 Free
5d867780 73435c40    65548     
5d87778c 00a2e3a8    46054 Free
5d882b74 73435c40    65548     
5d892b80 73435c40    65548     
5d8a2b8c 00a2e3a8    65546 Free
5d8b2b98 73435c40    65548     
5d8c2ba4 00a2e3a8    90350 Free
5d8d8c94 73435c40    65548     
5d8e8ca0 00a2e3a8       10 Free
5d8e8cac 73435c40    65548     
5d8f8cb8 73435c40    65548     
5d908cc4 734324e4       18     
5d908cd8 00a2e3a8      234 Free
5d908dc4 73435c40    65548     
5d918dd0 734324e4     2050     
5d9195d4 00a2e3a8     9298 Free
5d91ba28 73435c40    65548     
5d92ba34 00a2e3a8       10 Free
5d92ba40 73435c40    65548     
5d93ba4c 00a2e3a8      238 Free
5d93bb3c 73435c40    65548     
5d94bb48 73435c40    65548     
5d95bb54 734324e4     2050     
5d95c358 00a2e3a8     6390 Free
5d95dc50 73435c40    65548     
5d96dc5c 73435c40    65548     
5d97dc68 00a2e3a8    38930 Free
5d98747c 73435c40    65548     
5d997488 734324e4       96     
5d9974e8 00a2e3a8    65450 Free
5d9a7494 73435c40    65548     
5d9b74a0 73435c40    65548     
5d9c74ac 00a2e3a8    21094 Free
5d9cc714 73435c40    65548     
5d9dc720 00a2e3a8    65546 Free
5d9ec72c 73435c40    65548     
5d9fc738 00a2e3a8      138 Free
5d9fc7c4 73435c40    65548     
5da0c7d0 008b9418       32     
5da0c7f0 00a2e3a8    22854 Free
5da12138 73435c40    65548     
5da22144 73435c40    65548     
5da32150 00a2e3a8    24826 Free
5da3824c 73435c40    65548     
5da48258 73435c40    65548     
5da58264 00a2e3a8    33170 Free
5da603f8 73435c40    65548     
5da70404 734324e4     1538     
5da70a08 00a2e3a8    51034 Free
5da7d164 73435c40    65548     
5da8d170 734324e4     2050     
5da8d974 00a2e3a8    10430 Free
5da90234 73435c40    65548     
5daa0240 00a2e3a8     8238 Free
5daa2270 73435c40    65548     
5dab227c 73435c40    65548     
5dac2288 734324e4     1794     
5dac298c 00a2e3a8    11026 Free
5dac54a0 73435c40    65548     
5dad54ac 734324e4     2050     
5dad5cb0 00a2e3a8    36502 Free
5dadeb48 73435c40    65548     
5daeeb54 734324e4     2050     
5daef358 00a2e3a8    10886 Free
5daf1de0 73435c40    65548     
5db01dec 73435c40    65548     
5db11df8 73435c40    65548     
5db21e04 734324e4     2042     
5db22600 00a2e3a8     6450 Free
5db23f34 73435c40    65548     
5db33f40 00a2e3a8     8162 Free
5db35f24 73435c40    65548     
5db45f30 73435c40    65548     
5db55f3c 00a2e3a8      530 Free
5db56150 73435c40    65548     
5db6615c 73435c40    65548     
5db76168 00a2e3a8      494 Free
5db76358 73435c40    65548     
5db86364 00a2e3a8       10 Free
5db86370 73435c40    65548     
5db9637c 734324e4      296     
5db964a4 00a2e3a8    11114 Free
5db99010 73435c40    65548     
5dba901c 734324e4     2042     
5dba9818 00a2e3a8     6410 Free
5dbab124 73435c40    65548     
5dbbb130 734324e4     1538     
5dbbb734 00a2e3a8    14590 Free
5dbbf034 73435c40    65548     
5dbcf040 734324e4     2050     
5dbcf844 00a2e3a8    60162 Free
5dbde348 73435c40    65548     
5dbee354 00a2e3a8    65546 Free
5dbfe360 73435c40    65548     
5dc0e36c 73435c40    65548     
5dc1e378 00a2e3a8      238 Free
5dc1e468 73435c40    65548     
5dc2e474 00a2e3a8       10 Free
5dc2e480 73435c40    65548     
5dc3e48c 00a2e3a8    32754 Free
5dc46480 73435c40    65548     
5dc5648c 73435c40    65548     
5dc66498 73435c40    65548     
5dc764a4 00a2e3a8    11390 Free
5dc79124 73435c40    65548     
5dc89130 734324e4     1538     
5dc89734 00a2e3a8    14842 Free
5dc8d130 73435c40    65548     
5dc9d13c 73435c40    65548     
5dcad148 734324e4     2050     
5dcad94c 00a2e3a8    38894 Free
5dcb713c 73435c40    65548     
5dcc7148 734324e4     2042     
5dcc7944 00a2e3a8    60354 Free
5dcd6508 73435c40    65548     
5dce6514 73435c40    65548     
5dcf6520 73435c40    65548     
5dd0652c 00a2e3a8    16622 Free
5dd0a61c 73435c40    65548     
5dd1a628 00a2e3a8       10 Free
5dd1a634 73435c40    65548     
5dd2a640 734324e4     2042     
5dd2ae3c 00a2e3a8    45842 Free
5dd36150 73435c40    65548     
5dd4615c 734324e4       96     
5dd461bc 00a2e3a8    41126 Free
5dd50264 73435c40    65548     
5dd60270 00a2e3a8       10 Free
5dd6027c 73435c40    65548     
5dd70288 734324e4     2042     
5dd70a84 00a2e3a8     5846 Free
5dd7215c 73435c40    65548     
5dd82168 734324e4     1538     
5dd8276c 73435c40    65548     
5dd92778 734324e4     2050     
5dd92f7c 00a2e3a8    37354 Free
5dd9c168 73435c40    65548     
5ddac174 73435c40    65548     
5ddbc180 00a2e3a8     8866 Free
5ddbe424 73435c40    65548     
5ddce430 73435c40    65548     
5ddde43c 734324e4     1538     
5dddea40 00a2e3a8     6594 Free
5dde0404 73435c40    65548     
5ddf0410 734324e4      104     
5ddf0478 00a2e3a8    65198 Free
5de00328 73435c40    65548     
5de10334 73435c40    65548     
5de20340 00a2e3a8     1026 Free
5de20744 73435c40    65548     
5de30750 73435c40    65548     
5de4075c 734324e4     2050     
5de40f60 00a2e3a8    10782 Free
5de43980 73435c40    65548     
5de5398c 734324e4     2050     
5de54190 00a2e3a8     9950 Free
5de56870 73435c40    65548     
5de6687c 734324e4     2050     
5de67080 00a2e3a8    10478 Free
5de69970 73435c40    65548     
5de7997c 73435c40    65548     
5de89988 008b9418       32     
5de899a8 00a2e3a8    12438 Free
5de8ca40 73435c40    65548     
5de9ca4c 73435c40    65548     
5deaca58 73435c40    65548     
5debca64 73435c40    65548     
5decca70 734324e4     1538     
5decd074 00a2e3a8    18718 Free
5ded1994 73435c40    65548     
5dee19a0 73435c40    65548     
5def19ac 73435c40    65548     
5df019b8 00a2e3a8    47694 Free
5df0d408 73435c40    65548     
5df1d414 00a2e3a8    29098 Free
5df245c0 73435c40    65548     
5df345cc 73435c40    65548     
5df445d8 73435c40    65548     
5df545e4 00a2e3a8    65534 Free
5df645e4 73435c40    65548     
5df745f0 73435c40    65548     
5df845fc 00a2e3a8   122274 Free
5dfa23a0 73435c40    65548     
5dfb23ac 00a2e3a8       46 Free
5dfb23dc 73435c40    65548     
5dfc23e8 73435c40    65548     
5dfd23f4 734324e4     2042     
5dfd2bf0 00a2e3a8    10778 Free
5dfd560c 73435c40    65548     
5dfe5618 734324e4     2050     
5dfe5e1c 00a2e3a8    26058 Free
5dfec3e8 73435c40    65548     
5dffc3f4 73435c40    65548     
5e00c400 00a2e3a8    16646 Free
5e010508 73435c40    65548     
5e020514 00a2e3a8   188066 Free
5e04e3b8 73435c40    65548     
5e05e3c4 73435c40    65548     
5e06e3d0 734324e4     1538     
5e06e9d4 00a2e3a8    64006 Free
5e07e3dc 73435c40    65548     
5e08e3e8 7293910c       40     
5e08e410 00a2e3a8    65506 Free
5e09e3f4 73435c40    65548     
5e0ae400 73435c40    65548     
5e0be40c 00a2e3a8    13018 Free
5e0c16e8 73435c40    65548     
5e0d16f4 734324e4     2050     
5e0d1ef8 00a2e3a8    10782 Free
5e0d4918 73435c40    65548     
5e0e4924 73435c40    65548     
5e0f4930 00a2e3a8    12482 Free
5e0f79f4 73435c40    65548     
5e107a00 73435c40    65548     
5e117a0c 73435c40    65548     
5e127a18 734324e4     1538     
5e12801c 00a2e3a8     6902 Free
5e129b14 73435c40    65548     
5e139b20 73435c40    65548     
5e149b2c 734324e4       80     
5e149b7c 00a2e3a8     4454 Free
5e14ace4 73435c40    65548     
5e15acf0 73435c40    65548     
5e16acfc 734324e4      150     
5e16ad94 00a2e3a8      946 Free
5e16b148 73435c40    65548     
5e17b154 73435c40    65548     
5e18b160 00a2e3a8    65546 Free
5e19b16c 73435c40    65548     
5e1ab178 73435c40    65548     
5e1bb184 73435c40    65548     
5e1cb190 73435c40    65548     
5e1db19c 734324e4     2050     
5e1db9a0 00a2e3a8    22510 Free
5e1e1190 73435c40    65548     
5e1f119c 734324e4       18     
5e1f11b0 00a2e3a8     8134 Free
5e1f3178 73435c40    65548     
5e203184 734324e4     1322     
5e2036b0 00a2e3a8    15058 Free
5e207184 73435c40    65548     
5e217190 734324e4       18     
5e2171a4 00a2e3a8     8158 Free
5e219184 73435c40    65548     
5e229190 734324e4     2042     
5e22998c 00a2e3a8    14326 Free
5e22d184 73435c40    65548     
5e23d190 73435c40    65548     
5e24d19c 00a2e3a8   131094 Free
5e26d1b4 73435c40    65548     
5e27d1c0 734324e4     2050     
5e27d9c4 00a2e3a8    10794 Free
5e2803f0 73435c40    65548     
5e2903fc 00a2e3a8    65546 Free
5e2a0408 73435c40    65548     
5e2b0414 00a2e3a8    65546 Free
5e2c0420 73435c40    65548     
5e2d042c 00a2e3a8    12666 Free
5e2d35a8 73435c40    65548     
5e2e35b4 73435c40    65548     
5e2f35c0 73435c40    65548     
5e3035cc 00a2e3a8    23162 Free
5e309048 73435c40    65548     
5e319054 00a2e3a8    65546 Free
5e329060 73435c40    65548     
5e33906c 73435c40    65548     
5e349078 00a2e3a8    13166 Free
5e34c3e8 73435c40    65548     
5e35c3f4 00a2e3a8    12474 Free
5e35f4b0 73435c40    65548     
5e36f4bc 73435c40    65548     
5e37f4c8 73435c40    65548     
5e38f4d4 00a2e3a8    57318 Free
5e39d4bc 73435c40    65548     
5e3ad4c8 00a2e3a8    32766 Free
5e3b54c8 73435c40    65548     
5e3c54d4 00a2e3a8    65546 Free
5e3d54e0 73435c40    65548     
5e3e54ec 00a2e3a8    64382 Free
5e3f506c 73435c40    65548     
5e405078 00a2e3a8    27694 Free
5e40bca8 73435c40    65548     
5e41bcb4 73435c40    65548     
5e42bcc0 00a2e3a8    21418 Free
5e43106c 73435c40    65548     
5e441078 73435c40    65548     
5e451084 00a2e3a8    12658 Free
5e4541f8 73435c40    65548     
5e464204 00a2e3a8    12666 Free
5e467380 73435c40    65548     
5e47738c 73435c40    65548     
5e487398 00a2e3a8    15750 Free
5e48b120 73435c40    65548     
5e49b12c 73435c40    65548     
5e4ab138 00a2e3a8    49162 Free
5e4b7144 73435c40    65548     
5e4c7150 73435c40    65548     
5e4d715c 008b9418       32     
5e4d717c 73435c40    65548     
5e4e7188 73435c40    65548     
5e4f7194 00a2e3a8    33118 Free
5e4ff2f4 73435c40    65548     
5e50f300 73435c40    65548     
5e51f30c 00a2e3a8    12482 Free
5e5223d0 73435c40    65548     
5e5323dc 73435c40    65548     
5e5423e8 00a2e3a8    60786 Free
5e55115c 73435c40    65548     
5e561168 00a2e3a8    45518 Free
5e56c338 73435c40    65548     
5e57c344 73435c40    65548     
5e58c350 73435c40    65548     
5e59c35c 73435c40    65548     
5e5ac368 00a2e3a8    12834 Free
5e5af58c 73435c40    65548     
5e5bf598 734324e4     2050     
5e5bfd9c 73435c40    65548     
5e5cfda8 73435c40    65548     
5e5dfdb4 73435c40       12     
5e5dfdc0 00a2e3a8     3678 Free
5e5e0c20 73435c40    65548     
5e5f0c2c 73435c40    65548     
5e600c38 00a2e3a8    90882 Free
5e616f3c 73435c40    65548     
5e626f48 00a2e3a8    12666 Free
5e62a0c4 73435c40    65548     
5e63a0d0 73435c40    65548     
5e64a0dc 00a2e3a8       22 Free
5e64a0f4 73435c40    65548     
5e65a100 734324e4       40     
5e65a128 00a2e3a8     4866 Free
5e65b42c 73435c40    65548     
5e66b438 73435c40    65548     
5e67b444 00a2e3a8    53442 Free
5e688508 73435c40    65548     
5e698514 73435c40    65548     
5e6a8520 00a2e3a8    45514 Free
5e6b36ec 73435c40    65548     
5e6c36f8 73435c40    65548     
5e6d3704 00a2e3a8      138 Free
5e6d3790 73435c40    65548     
5e6e379c 73435c40    65548     
5e6f37a8 73435c40    65548     
5e7037b4 00a2e3a8    10302 Free
5e705ff4 73435c40    65548     
5e716000 734324e4     1794     
5e716704 00a2e3a8      262 Free
5e71680c 73435c40    65548     
5e726818 734324e4     2050     
5e72701c 00a2e3a8     6126 Free
5e72880c 73435c40    65548     
5e738818 00a2e3a8    20918 Free
5e73d9d0 73435c40    65548     
5e74d9dc 00a2e3a8    12482 Free
5e750aa0 73435c40    65548     
5e760aac 00a2e3a8    12474 Free
5e763b68 73435c40    65548     
5e773b74 00a2e3a8    12666 Free
5e776cf0 73435c40    65548     
5e786cfc 00a2e3a8    12658 Free
5e789e70 73435c40    65548     
5e799e7c 00a2e3a8    12654 Free
5e79cfec 73435c40    65548     
5e7acff8 00a2e3a8    12666 Free
5e7b0174 73435c40    65548     
5e7c0180 73435c40    65548     
5e7d018c 00a2e3a8    12666 Free
5e7d3308 73435c40    65548     
5e7e3314 73435c40    65548     
5e7f3320 73435c40    65548     
5e80332c 00a2e3a8    46070 Free
5e80e724 73435c40    65548     
5e81e730 73435c40    65548 

  可以看到,同一个GC段中的对象部分被标记为Free,而且是间隔出现。

       继续查看两个非Free状态属于哪个类

!gcroot 5e7c0180
HandleTable:
    008913e8 (pinned handle)
    -> 020c5568 System.Object[]
    -> 0114e8bc System.Collections.Hashtable
    -> 0147ead8 System.Collections.Hashtable+bucket[]
    -> 01477c04 SunElecFlowService.MemLib.MemMeterObject
    -> 0e6dfe58 Sun.SocketHelper.Session
    -> 5e7c0180 System.Byte[]

    008932ec (async pinned handle)
    -> 05212298 System.Threading.OverlappedData
    -> 5e7c0180 System.Byte[]


!gcroot 5e80e724
HandleTable:
    008913e8 (pinned handle)
    -> 020c5568 System.Object[]
    -> 0114e8bc System.Collections.Hashtable
    -> 0147ead8 System.Collections.Hashtable+bucket[]
    -> 0146e578 SunElecFlowService.MemLib.MemMeterObject
    -> 01844fb8 Sun.SocketHelper.Session
    -> 01844edc System.Net.Sockets.Socket
    -> 01845070 System.Net.Sockets.Socket+CacheSet
    -> 018450f4 System.Net.CallbackClosure
    -> 01845050 System.AsyncCallback
    -> 01493ea8 Sun.SocketHelper.Server
    -> 01493f74 System.Collections.Hashtable
    -> 0210ac08 System.Collections.Hashtable+bucket[]
    -> 0e6e6400 Sun.SocketHelper.Session
    -> 5e80e724 System.Byte[]

    008935b0 (async pinned handle)
    -> 018bfb48 System.Threading.OverlappedData
    -> 5e80e724 System.Byte[]

  通过查看两个对象,圴为Session对象下面的缓冲区

      至此,问题大致清晰了:Session对象未及时清理导致的内存溢出。

   参考: https://www.cnblogs.com/huangxincheng/p/15391950.html

你可能感兴趣的:(WinDBG,c#,windbg)