AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時間:2023-10-08 07:05:13 231觀看
導(dǎo)讀一:背景1. 講故事中秋國慶長假結(jié)束,哈哈,在老家拍了很多的短視頻,有興趣的可以上B站觀看:https://space.bilibili.com/409524162 ,今天繼續(xù)給大家分享各種奇奇怪怪的.NET生產(chǎn)事故,希望能幫助大家在未來的編程之路上少踩坑。

一:背景

1. 講故事

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

話不多說,這篇看一個.NET程序集泄露導(dǎo)致的CLR私有堆泄露的案例,這個泄露和 JsonConvert 有關(guān),哈哈,相信你肯定比較驚訝!WEZ28資訊網(wǎng)——每日最新資訊28at.com

二:WinDbg 分析

1. 到底是哪里的泄露

首先觀察一下進程的提交內(nèi)存的大小,即通過 !address -summary 觀察。WEZ28資訊網(wǎng)——每日最新資訊28at.com

0:000> !address -summary--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotalFree                                    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 %ofTotalMEM_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 %ofTotalMEM_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,進程堆占用 1G ,差不多占了一半,但不能說明就是非托管內(nèi)存泄露,接下來繼續(xù)觀察下托管堆。WEZ28資訊網(wǎng)——每日最新資訊28at.com

0:000> !eeheap -gcNumber of GC Heaps: 8------------------------------Heap 7 (000001C4971013A0)generation 0 starts at 0x000001C817D201A0generation 1 starts at 0x000001C817C878D8generation 2 starts at 0x000001C817261000ephemeral segment allocation context: none         segment             begin         allocated              size000001C817260000  000001C817261000  000001C819013F98  0x1db2f98(31141784)Large object heap starts at 0x000001C907261000         segment             begin         allocated              size000001C907260000  000001C907261000  000001C907261018  0x18(24)Pinned object heap starts at 0x000001C987261000000001C987260000  000001C987261000  000001C9872ABA50  0x4aa50(305744)Heap Size:       Size: 0x1dfda00 (31447552) bytes.------------------------------GC Heap Size:    Size: 0xba26488 (195191944) bytes.

從卦中可以看到當(dāng)前的托管堆占用僅 195M,這就更好的驗證當(dāng)前確實存在非托管內(nèi)存泄露,由于非托管內(nèi)存沒有開啟 ust,也沒有 perfview 的etw文件,所以沒有好的方式進一步挖掘,到這里可能就止步不前了。WEZ28資訊網(wǎng)——每日最新資訊28at.com

2. 到底是哪里的泄露

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

0:000> !eeheap -loaderLoader 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,到這里基本就搞清楚了,然來是 程序集泄露。WEZ28資訊網(wǎng)——每日最新資訊28at.com

這里稍微補充一下,像這種問題早期可以使用 dotnet-counter 或者 Windows 的程序集指標(biāo) 監(jiān)控一下,或許你就能輕松找出原因,截圖如下:WEZ28資訊網(wǎng)——每日最新資訊28at.com

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

圖片圖片WEZ28資訊網(wǎng)——每日最新資訊28at.com

而且 dotnet-counter 還是跨平臺的,非常實用,大家可以琢磨琢磨,接下來抽一個module 用命令 !dumpmodule -mt 00007ff846e034c0 觀察下,內(nèi)部到底有哪些類型。WEZ28資訊網(wǎng)——每日最新資訊28at.com

0:000> !dumpmodule -mt 00007ff846e034c0Name: Unknown ModuleAttributes:              Reflection IsDynamic IsInMemory Assembly:                000001c9e193b9e0BaseAddress:             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`100007ff820e710f8 0x02000003 xxx.xxx.Models.IApiResult0:000> !dumpmt -md 00007ff846e03db0Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table           Entry       MethodDesc    JIT Name00007FF822F05FA8 00007ff823285b50   NONE xxx.Json.Converters.PolymorphismConverter`100007FF822EFD5E8 00007ff82323b1b8   NONE System.Text.Json.Serialization.JsonConverter`100007FF822EFD5F0 00007ff82323b1c8   NONE System.Text.Json.Serialization.JsonConverter`100007FF8414CB978 00007ff846e03d88    JIT IApiResultDynamicJsonConverter..ctor()

仔細(xì)分析卦中信息,可以很明顯的看到。WEZ28資訊網(wǎng)——每日最新資訊28at.com

  • Json.Converters.PolymorphismConverter

看樣子和牛頓有關(guān)系,并且還是一個自定義的 JsonConvert。WEZ28資訊網(wǎng)——每日最新資訊28at.com

  • IApiResult 和 IApiResultDynamicJsonConverter

看樣子是一個接口的返回協(xié)議類,需要在代碼中重點關(guān)注。WEZ28資訊網(wǎng)——每日最新資訊28at.com

有了這些信息,接下來就是重點關(guān)注代碼中的 PolymorphismConverter 類,果然就找到了一處。WEZ28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片WEZ28資訊網(wǎng)——每日最新資訊28at.com

從類的定義來看,一般這種東西都是在 ConfigureServices 方法中做 初始化定義 的,按理說問題不大,那為什么會有問題呢?還得要查下它的引用,終于給找到了,截圖如下:WEZ28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片WEZ28資訊網(wǎng)——每日最新資訊28at.com

這是一個低級錯誤哈,每次讀取 ApiResult.Data 的時候都要 jsonSerializerOptions.AddPolymorphism(); 操作,也就每次都會創(chuàng)建程序集,終于真相大白。WEZ28資訊網(wǎng)——每日最新資訊28at.com

三:總結(jié)

這種程序集泄露導(dǎo)致的生產(chǎn)事故不應(yīng)該哈,反應(yīng)了團隊中多人協(xié)作的時候還是有待提高!WEZ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-12298-0.html記一次 .NET某賬本軟件 非托管泄露分析

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 12字真言,教你如何選擇Gradle和Maven

下一篇: Sentinel安裝和項目整合Sentinel

標(biāo)簽:
  • 熱門焦點
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • 之家push系統(tǒng)迭代之路

    前言在這個信息爆炸的互聯(lián)網(wǎng)時代,能夠及時準(zhǔn)確獲取信息是當(dāng)今社會要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動拉"獲取信息的方式已不能滿足用
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內(nèi)容創(chuàng)建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準(zhǔn)備。請在進入步驟2之前進行解壓。圖
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法。可以用來發(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或
  • 拼多多APP上線本地生活入口,群雄逐鹿萬億市場

    Tech星球(微信ID:tech618)文 | 陳橋輝 Tech星球獨家獲悉,拼多多在其APP內(nèi)上線了&ldquo;本地生活&rdquo;入口,位置較深,位于首頁的&ldquo;充值中心&rdquo;內(nèi),目前主要售賣美食相關(guān)的
  • 品牌洞察丨服務(wù)本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現(xiàn)&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 當(dāng)家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當(dāng)家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應(yīng)鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 半導(dǎo)體需求下滑 三星電子DS業(yè)務(wù)部門今年營業(yè)虧損預(yù)計超10萬億韓元

    7月17日消息,據(jù)外媒報道,去年下半年開始的半導(dǎo)體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營收明顯下滑,部分廠商甚至出現(xiàn)了虧損。作為
  • iQOO Neo8系列新品發(fā)布會

    旗艦雙芯 更強更Pro
Top