国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

記一次 .NET某賬本軟件 非托管泄露分析

開發(fā) 前端
在 C# 所處的 Windows 進(jìn)程中,其實(shí)有很多的堆,比如:crt堆,ntheap堆,gc堆,clr私有堆,堆外(VirtualAlloc),調(diào)試沒有標(biāo)準(zhǔn)答案,不斷的假設(shè),試探,摸著石頭過河,言外之意就是這個堆沒問題,不代表其他堆也沒有問題,這樣想思路就比較順暢了,我們可以看看其他的堆,比如這里的 CLR私有堆,使用 !eeheap -loader 觀察。

一:背景

1. 講故事

中秋國慶長假結(jié)束,哈哈,在老家拍了很多的短視頻,有興趣的可以上B站觀看:https://space.bilibili.com/409524162 ,今天繼續(xù)給大家分享各種奇奇怪怪的.NET生產(chǎn)事故,希望能幫助大家在未來的編程之路上少踩坑。

話不多說,這篇看一個.NET程序集泄露導(dǎo)致的CLR私有堆泄露的案例,這個泄露和 JsonConvert 有關(guān),哈哈,相信你肯定比較驚訝!

二:WinDbg 分析

1. 到底是哪里的泄露

首先觀察一下進(jìn)程的提交內(nèi)存的大小,即通過 !address -summary 觀察。

0:000> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free                                    390     7dfa`63fa8000 ( 125.978 TB)           98.42%
<unknown>                             13628      205`32974000 (   2.020 TB)  99.92%    1.58%
Heap                                   8143        0`4042b000 (   1.004 GB)   0.05%    0.00%
Stack                                   186        0`1f8e0000 ( 504.875 MB)   0.02%    0.00%
Image                                  1958        0`09775000 ( 151.457 MB)   0.01%    0.00%
Other                                     9        0`001d7000 (   1.840 MB)   0.00%    0.00%
TEB                                      62        0`0007c000 ( 496.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                              312      200`00a06000 (   2.000 TB)  98.92%    1.56%
MEM_PRIVATE                           21717        5`91ecd000 (  22.280 GB)   1.08%    0.02%
MEM_IMAGE                              1958        0`09775000 ( 151.457 MB)   0.01%    0.00%

--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE                                390     7dfa`63fa8000 ( 125.978 TB)           98.42%
MEM_RESERVE                            4509      205`0fc14000 (   2.020 TB)  99.89%    1.58%
MEM_COMMIT                            19478        0`8c434000 (   2.192 GB)   0.11%    0.00%

當(dāng)前的提交內(nèi)存占用了 2.19G,進(jìn)程堆占用 1G ,差不多占了一半,但不能說明就是非托管內(nèi)存泄露,接下來繼續(xù)觀察下托管堆。

0:000> !eeheap -gc
Number of GC Heaps: 8
------------------------------
Heap 7 (000001C4971013A0)
generation 0 starts at 0x000001C817D201A0
generation 1 starts at 0x000001C817C878D8
generation 2 starts at 0x000001C817261000
ephemeral segment allocation context: none
         segment             begin         allocated              size
000001C817260000  000001C817261000  000001C819013F98  0x1db2f98(31141784)
Large object heap starts at 0x000001C907261000
         segment             begin         allocated              size
000001C907260000  000001C907261000  000001C907261018  0x18(24)
Pinned object heap starts at 0x000001C987261000
000001C987260000  000001C987261000  000001C9872ABA50  0x4aa50(305744)
Heap Size:       Size: 0x1dfda00 (31447552) bytes.
------------------------------
GC Heap Size:    Size: 0xba26488 (195191944) bytes.

從卦中可以看到當(dāng)前的托管堆占用僅 195M,這就更好的驗(yàn)證當(dāng)前確實(shí)存在非托管內(nèi)存泄露,由于非托管內(nèi)存沒有開啟 ust,也沒有 perfview 的etw文件,所以沒有好的方式進(jìn)一步挖掘,到這里可能就止步不前了。

2. 到底是哪里的泄露

在 C# 所處的 Windows 進(jìn)程中,其實(shí)有很多的堆,比如:crt堆,ntheap堆,gc堆,clr私有堆,堆外(VirtualAlloc),調(diào)試沒有標(biāo)準(zhǔn)答案,不斷的假設(shè),試探,摸著石頭過河,言外之意就是這個堆沒問題,不代表其他堆也沒有問題,這樣想思路就比較順暢了,我們可以看看其他的堆,比如這里的 CLR私有堆,使用 !eeheap -loader 觀察。

0:000> !eeheap -loader
Loader Heap:
--------------------------------------
...
Module 00007ff846e034c0: Size: 0x0 (0) bytes.
Module 00007ff846e03930: Size: 0x0 (0) bytes.
Module 00007ff846e04180: Size: 0x0 (0) bytes.
Module 00007ff846e047e0: Size: 0x0 (0) bytes.
Module 00007ff846e04e40: Size: 0x0 (0) bytes.
Total size:      Size: 0x0 (0) bytes.
--------------------------------------
Total LoaderHeap size:   Size: 0x47252000 (1193615360) bytes total, 0x1f68000 (32931840) bytes wasted.
=======================================

從卦中可以看到有非常多的 module 迸射出來,估計有幾萬個,并且可以看到總的大小是 1.19G,到這里基本就搞清楚了,然來是 程序集泄露。

這里稍微補(bǔ)充一下,像這種問題早期可以使用 dotnet-counter 或者 Windows 的程序集指標(biāo) 監(jiān)控一下,或許你就能輕松找出原因,截圖如下:

PS C:\Users\Administrator\Desktop> dotnet-counters monitor -n WebApplication2

圖片圖片

而且 dotnet-counter 還是跨平臺的,非常實(shí)用,大家可以琢磨琢磨,接下來抽一個module 用命令 !dumpmodule -mt 00007ff846e034c0 觀察下,內(nèi)部到底有哪些類型。

0:000> !dumpmodule -mt 00007ff846e034c0
Name: Unknown Module
Attributes:              Reflection IsDynamic IsInMemory 
Assembly:                000001c9e193b9e0
BaseAddress:             0000000000000000
...

Types defined in this module

              MT          TypeDef Name
------------------------------------------------------------------------------
00007ff846e03db0 0x02000002 

Types referenced in this module

              MT            TypeRef Name
------------------------------------------------------------------------------
00007ff820ff5748 0x02000002 xxx.xxx.Json.Converters.PolymorphismConverter`1
00007ff820e710f8 0x02000003 xxx.xxx.Models.IApiResult

0:000> !dumpmt -md 00007ff846e03db0
Number of IFaces in IFaceMap: 0
--------------------------------------
MethodDesc Table
           Entry       MethodDesc    JIT Name
00007FF822F05FA8 00007ff823285b50   NONE xxx.Json.Converters.PolymorphismConverter`1
00007FF822EFD5E8 00007ff82323b1b8   NONE System.Text.Json.Serialization.JsonConverter`1
00007FF822EFD5F0 00007ff82323b1c8   NONE System.Text.Json.Serialization.JsonConverter`1
00007FF8414CB978 00007ff846e03d88    JIT IApiResultDynamicJsonConverter..ctor()

仔細(xì)分析卦中信息,可以很明顯的看到。

  • Json.Converters.PolymorphismConverter

看樣子和牛頓有關(guān)系,并且還是一個自定義的 JsonConvert。

  • IApiResult 和 IApiResultDynamicJsonConverter

看樣子是一個接口的返回協(xié)議類,需要在代碼中重點(diǎn)關(guān)注。

有了這些信息,接下來就是重點(diǎn)關(guān)注代碼中的 PolymorphismConverter 類,果然就找到了一處。

圖片圖片

從類的定義來看,一般這種東西都是在 ConfigureServices 方法中做 初始化定義 的,按理說問題不大,那為什么會有問題呢?還得要查下它的引用,終于給找到了,截圖如下:

圖片圖片

這是一個低級錯誤哈,每次讀取 ApiResult.Data 的時候都要 jsonSerializerOptions.AddPolymorphism(); 操作,也就每次都會創(chuàng)建程序集,終于真相大白。

三:總結(jié)

這種程序集泄露導(dǎo)致的生產(chǎn)事故不應(yīng)該哈,反應(yīng)了團(tuán)隊(duì)中多人協(xié)作的時候還是有待提高!

責(zé)任編輯:武曉燕 來源: 一線碼農(nóng)聊技術(shù)
相關(guān)推薦

2023-09-26 01:11:58

MES非托管泄露

2022-10-09 10:47:37

NET視覺軟件

2022-09-13 17:46:19

STA模式內(nèi)存

2023-07-06 10:11:38

.NET模式dump

2024-12-27 13:31:18

.NETdump調(diào)試

2023-05-15 11:15:50

.NET門診語句

2024-05-31 12:56:06

.NET代碼方法

2023-09-27 07:23:10

.NET監(jiān)控軟件

2025-09-02 01:35:00

.NET光學(xué)定位軟件

2024-03-28 12:56:36

2023-04-06 10:52:18

2023-06-26 00:12:46

2024-07-01 13:00:24

.NET網(wǎng)絡(luò)邊緣計算

2024-11-29 10:06:59

2022-01-17 21:28:36

管理系統(tǒng).NET

2024-07-09 11:51:20

Windows線程池源碼

2023-06-29 17:55:00

.NET日志WinDbg

2025-10-29 01:11:00

.NET系統(tǒng)windows

2024-09-14 10:28:56

.NET卡死程序

2021-10-27 07:30:32

.NETCPU論壇
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

在线视频观看日韩| 欧美亚洲国产精品久久| 国产乱人伦偷精品视频不卡 | 亚洲高清视频一区二区| 日韩综合一区二区三区| 欧美亚洲综合另类| free性欧美1819hd| 成人免费视频视频| 麻豆成人小视频| 不卡一区综合视频| 久久成人在线视频| 综合另类专区| 欧美一区二区三区四区视频| www.4438全国最大| 成人午夜电影久久影院| 日本10禁啪啪无遮挡免费一区二区| 精品视频久久| 欧美一级免费视频| 精品乱码一区二区三区四区| 精品国精品国产| 欧美美女搞黄| 亚洲国产美女搞黄色| 亚洲成人福利在线观看| 成人av第一页| 人妻无码久久一区二区三区免费| 丝袜亚洲另类欧美| 精品免费视频123区| 在线免费观看日本欧美爱情大片| 国产精品久久久久久久久久久久久| 色诱色偷偷久久综合| 久久黄色级2电影| 成人欧美一区二区| 欧美电影一区| 91精品视频在线免费观看| 国内成人精品| 热re91久久精品国99热蜜臀| 日本超碰一区二区| 欧美极品在线播放| 红杏一区二区三区| 97在线观看免费高清| 精品国产乱子伦一区二区| 欧美福利视频在线| 国产精品x8x8一区二区| 欧美亚洲在线视频| 日本道不卡免费一区| 国产日韩欧美在线视频观看| 国产精品99视频| 亚洲a级在线播放观看| 欧美日本中文| 欧洲精品亚洲精品| 久色婷婷小香蕉久久| 日韩中文字幕在线不卡| 99久久精品国产一区二区三区| 91精品国产91久久久久麻豆 主演| 国产98色在线|日韩| 欧美成人四级hd版| 亚洲成人毛片| 性欧美在线看片a免费观看| av在线成人| 一区二区三区国产免费| 亚洲h在线观看| 久草成人资源| 国产精品自在线| 欧美激情第8页| 欧美一卡2卡3卡4卡无卡免费观看水多多| 久久久久看片| 日韩欧美精品免费| 中文字幕一区二区三区不卡在线 | www..com久久爱| 久久偷看各类女兵18女厕嘘嘘| 国产成人久久| 熟女视频一区二区三区| 成人午夜激情片| 水中色av综合| 日韩在线精品视频| 亚洲五码中文字幕| 中文字幕一区二区三区四区不卡| 久久蜜桃资源一区二区老牛| 自拍亚洲一区| 丁香在线视频| 熟妇熟女乱妇乱女网站| 亚洲国产日韩欧美综合久久| 日本一区二区在线看| 99国产高清| 95精品视频在线| 午夜在线观看视频网站| 亚洲第一色中文字幕| 第四色在线一区二区| 不卡视频一区二区三区| 大美女一区二区三区| 国产午夜在线| 中文字幕欧美精品日韩中文字幕| 欧美手机视频| 国产人妻777人伦精品hd| 欧美三区在线观看| 试看120秒一区二区三区| 国产区欧美区日韩区| 亚洲欧美精品午睡沙发| 日韩成人av网站| wwwwww.欧美系列| 国产精品333| 亚洲蜜桃精久久久久久久| 大地资源网3页在线观看| 91av福利视频| 亚洲视频资源在线| 国产精品第一| 亚洲japanese制服美女| 亚洲一级二级三级在线免费观看| eeuss鲁片一区二区三区在线观看| 天堂资源在线中文精品| 免费大片在线观看www| 亚洲va欧美va国产综合剧情| 亚洲免费伊人电影在线观看av| 99久久婷婷国产综合精品首页| 欧美一三区三区四区免费在线看| 91大神在线观看线路一区| 成人伊人精品色xxxx视频| 不卡一区二区在线| 日本中文字幕在线2020| 欧美最猛性xxxxx免费| 国产成人丝袜美腿| 国产欧美一区二区三区在线| 99re这里只有精品首页| 一区二区三区日本视频| 欧美在线视频二区| 亚洲一线二线三线视频| 日韩精品一区二区三区中文| 国产精品免费一区二区三区观看| 精品伊人久久久久7777人| 久草视频在线看| 97伦理在线四区| 这里只有精品免费| 六月婷婷色综合| 欧美成人一二区| 欧美成人福利在线观看| 欧美黑人一区二区三区| 夜夜精品视频一区二区| 国色天香久久精品国产一区| 亚洲一区三区在线观看| 亚洲人成电影在线播放| 亚洲综合在线第一页| 日韩毛片在线| 日韩视频 中文字幕| 日韩视频一区二区三区在线播放| 成人a在线观看| 狠狠色狠狠色综合系列| 超碰caoporn久久| 蜜桃久久精品乱码一区二区 | 欧美综合影院| 国产片侵犯亲女视频播放| 性欧美xxxx视频在线观看| 亚洲精品一区在线观看香蕉| 成人免费视频免费观看| 日本不卡电影| 在线亚洲人成电影网站色www| gogo人体一区| 国产免费成人在线| 日韩小视频在线观看| 国产麻豆精品一区二区| 色资源二区在线视频| 在线码字幕一区| 日韩hd视频在线观看| 国产一区二区三区免费| 超碰在线cao| 视频在线观看成人| 亚洲精品在线电影| 免费在线观看精品| 中文字幕 在线观看| 996这里只有精品| 中文字幕亚洲欧美日韩高清| 成人av网在线| 综合激情网...| 毛片手机在线观看| 成人av福利| 大桥未久在线视频| 182tv在线播放| 国产午夜视频在线观看| 自拍偷拍 国产| 男人天堂资源在线| 久久中文字幕二区| 欧美精品三级在线观看| 欧洲精品在线播放| 欧美日韩激情小视频| 蜜臀av在线播放一区二区三区| 国产美女精品| 色一区二区三区四区| 国产精品日日摸夜夜摸av| 欧美人与拘性视交免费看| 丝袜亚洲另类欧美综合| 天天影视综合| 国产欧美日韩在线| 欧美在线影院一区二区| 精品免费视频.| 亚洲精选在线观看| 欧美日本国产视频| 日韩欧美成人免费视频| 亚洲精品在线电影| 精品美女被调教视频大全网站| 五月婷婷久久丁香| 欧美日韩国产欧美日美国产精品|