国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記一次 .NET某新能源MES系統(tǒng) 非托管泄露

這篇具有很好參考價值的文章主要介紹了記一次 .NET某新能源MES系統(tǒng) 非托管泄露。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一:背景

1. 講故事

前些天有位朋友找到我,說他們的程序有內(nèi)存泄露,跟著我的錯題集也沒找出是什么原因,剛好手頭上有一個 7G+ 的 dump,讓我?guī)兔聪率窃趺椿厥?,既然找到我了那就給他看看吧,不過他的微信頭像有點像 二道販子,不管到我這里是不是 三道,該分析的還得要分析呀。??????

二:WinDbg 分析

1. 到底是哪里的泄露

這個非常簡單,對用戶態(tài)內(nèi)存段做一個分組處理就明白了,可以用 windbg 的 !address -summary 觀察便知。


0:000> !address -summary
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free                                  44571     7ffc`f0900000 ( 127.988 TB)           99.99%
<unknown>                             77531        2`47cee000 (   9.122 GB)  74.52%    0.01%
Heap                                  16406        0`a45cf000 (   2.568 GB)  20.98%    0.00%
Image                                  2116        0`15ad7000 ( 346.840 MB)   2.77%    0.00%
Stack                                  2286        0`0d160000 ( 209.375 MB)   1.67%    0.00%
TEB                                     762        0`005f4000 (   5.953 MB)   0.05%    0.00%
Other                                    39        0`00207000 (   2.027 MB)   0.02%    0.00%
PEB                                       1        0`00001000 (   4.000 kB)   0.00%    0.00%

--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE                              44571     7ffc`f0900000 ( 127.988 TB)           99.99%
MEM_COMMIT                            86575        1`e571e000 (   7.585 GB)  61.96%    0.01%
MEM_RESERVE                           12566        1`29fd2000 (   4.656 GB)  38.04%    0.00%

從卦中可以清晰的看到 MEM_COMMIT=7.5G 同時 Heap=2.5G,說明可能是托管內(nèi)存泄露,接下來用 !eeheap -gc 觀察下托管堆內(nèi)存。


0:000> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x0000020F1BC03E80
generation 1 starts at 0x0000020F1AFE7BA0
generation 2 starts at 0x0000020D2E4B1000
ephemeral segment allocation context: none
Small object heap
         segment             begin         allocated         committed    allocated size    committed size
0000020D2E4B0000  0000020D2E4B1000  0000020D3E4B0000  0000020D3E4B0000  0xffff000(268431360)  0xffff000(268431360)
0000020D09830000  0000020D09831000  0000020D1982FFE0  0000020D19830000  0xfffefe0(268431328)  0xffff000(268431360)
0000020D9D9E0000  0000020D9D9E1000  0000020DAD9DFFB8  0000020DAD9E0000  0xfffefb8(268431288)  0xffff000(268431360)
0000020DD50C0000  0000020DD50C1000  0000020DE50BFFB0  0000020DE50C0000  0xfffefb0(268431280)  0xffff000(268431360)
0000020E10B90000  0000020E10B91000  0000020E20B8FF10  0000020E20B90000  0xfffef10(268431120)  0xffff000(268431360)
0000020E54C60000  0000020E54C61000  0000020E64C60000  0000020E64C60000  0xffff000(268431360)  0xffff000(268431360)
0000020E9C050000  0000020E9C051000  0000020EAC04FF70  0000020EAC050000  0xfffef70(268431216)  0xffff000(268431360)
0000020ED89B0000  0000020ED89B1000  0000020EE89AFF20  0000020EE89B0000  0xfffef20(268431136)  0xffff000(268431360)
0000020F11FF0000  0000020F11FF1000  0000020F1C20E0A8  0000020F1C21A000  0xa21d0a8(169988264)  0xa229000(170037248)
Frozen object heap
         segment             begin         allocated         committed    allocated size    committed size
Large object heap starts at 0x0000020D3E4B1000
         segment             begin         allocated         committed    allocated size    committed size
0000020D3E4B0000  0000020D3E4B1000  0000020D460B3F00  0000020D460D4000  0x7c02f00(130035456)  0x7c23000(130166784)
0000020D72620000  0000020D72621000  0000020D7A19C808  0000020D7A19D000  0x7b7b808(129480712)  0x7b7c000(129482752)
0000020D7CFD0000  0000020D7CFD1000  0000020D84B0CDF0  0000020D84B2D000  0x7b3bdf0(129220080)  0x7b5c000(129351680)
0000020E08B90000  0000020E08B91000  0000020E0FAC4350  0000020E0FAC5000  0x6f33350(116601680)  0x6f34000(116604928)
0000020F2A040000  0000020F2A041000  0000020F2DB4A738  0000020F2DB4B000  0x3b09738(61904696)  0x3b0a000(61906944)
Total Allocated Size:              Size: 0xabf0bd10 (2884680976) bytes.
Total Committed Size:              Size: 0xabf5a000 (2885001216) bytes.
------------------------------
GC Allocated Heap Size:    Size: 0xabf0bd10 (2884680976) bytes.
GC Committed Heap Size:    Size: 0xabf5a000 (2885001216) bytes.


從卦中數(shù)據(jù)看當前托管堆也才 2.8G,這就比較懵逼了,看樣子還是比較難搞的 非托管內(nèi)存泄露,內(nèi)存大概被 heap + VirtualAlloc/FileMap 合力吃掉了,接下來該怎么分析呢?有點迷茫。。。

2. 還有其他突破口嗎

一般來說這種問題看dump效果已經(jīng)很不好了,比較好的方式就是用 perfview 去監(jiān)控 VirtualAlloc,HeapAlloc 分配,但現(xiàn)在可惜的是我們只有一個dump,怎么辦呢? Windbg 命令除了可以看 ntheap,還可以看 clr 的私有堆,即 loader堆,或許有什么新的發(fā)現(xiàn),可以使用命令 !eeheap -loader 。


0:000> !dumpdomain
--------------------------------------
System Domain:      00007fffeb742af0
...
--------------------------------------
Domain 1:           0000020d2c794430
Assembly:           0000020d59298350 [mr4vbdbg, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]
ClassLoader:        0000020D579778E0
SecurityDescriptor: 0000020D593DE320
  Module
  00007fff8f0a5af8    mr4vbdbg, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Assembly:           0000020d5751b040 [51buoqnx, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]
ClassLoader:        0000020D57974130
SecurityDescriptor: 0000020D593E0060
  Module
  00007fff8f059798    51buoqnx, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
...
Assembly:           0000020d5751c000 [r2bjpfrk, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]
ClassLoader:        0000020D579741E0
SecurityDescriptor: 0000020D593DF340
  Module
  00007fff8f05aff8    r2bjpfrk, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
...
Assembly:           0000020d5929acf0 [qgt1j2cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]
ClassLoader:        0000020D57976B20
SecurityDescriptor: 0000020D593DD6F0
  Module
  00007fff8f0a11d8    qgt1j2cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
...
Total size:      Size: 0x0 (0) bytes.
--------------------------------------
Total LoaderHeap size:   Size: 0x50f6d000 (1358352384) bytes total, 0x2f43000 (49557504) bytes wasted.
=======================================


我去,不看不知道,一看嚇一跳,刷了好久也沒刷完,,,看了下總大小是 1.35G,說明當前程序存在著程序集泄露,而且程序集的名字也是奇奇怪怪的比如上面的 r2bjpfrk , qgt1j2cs, 看樣子都是動態(tài)生成出來的。

這里要提醒一下的是,不要看這里面是 1.35G,它還會涉及到其他未被關(guān)聯(lián)到的內(nèi)存,比如 VirtualAlloc/MapFile/GCHeap 等等

接下來抽幾個 module 看看里面都定義了什么,使用 !dumpmodule -mt 命令即可。


0:000> !dumpmodule -mt 00007fff8f0a11d8
Name: qgt1j2cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Attributes:              PEFile 
Types defined in this module

              MT          TypeDef Name
------------------------------------------------------------------------------
00007fff8f0a1938 0x02000002 ServiceBase.WebService.DynamicWebLoad.xxxImplService

Types referenced in this module

              MT            TypeRef Name
------------------------------------------------------------------------------
00007fffc3232730 0x02000001 System.Web.Services.Protocols.SoapHttpClientProtocol
00007fffe81789e0 0x02000002 System.IAsyncResult
00007fffe81759d8 0x02000003 System.AsyncCallback
00007fffe15f42f8 0x02000004 System.Xml.Serialization.XmlElementAttribute
00007fffe57810a8 0x02000007 System.CodeDom.Compiler.GeneratedCodeAttribute
00007fffe80ee5f8 0x02000008 System.Diagnostics.DebuggerStepThroughAttribute
00007fffe5780210 0x02000009 System.ComponentModel.DesignerCategoryAttribute
00007fffc3239d60 0x0200000a System.Web.Services.WebServiceBindingAttribute
00007fffc323a2f8 0x0200000b System.Web.Services.Protocols.WebClientProtocol
00007fffc32322d8 0x0200000c System.Web.Services.Protocols.SoapDocumentMethodAttribute
00007fffe80f5dd8 0x0200000d System.Object
00007fffe80f59c0 0x0200000e System.String

經(jīng)過一頓搜索,發(fā)現(xiàn)模塊中都是這些內(nèi)容,仔細分析 TypeDef NameTypeRef Name,大概就能猜測到,代碼中有 SoapHttpClient 去訪問這個 xxxImplService 類名的服務(wù)地址,有了這些信息就可以分析源碼了。

3. 尋找源碼

很快就定位到了代碼,原來是在請求 WebService 的過程中用 CSharpCodeProvider 動態(tài)生成了程序集,而且還塞了 4個 dll,截圖如下:

記一次 .NET某新能源MES系統(tǒng) 非托管泄露

到這里就知道了來龍去脈,最后就是讓朋友合理的去卸載這里的 程序集 ,或者干脆繞過去。

三:總結(jié)

這次事故主要是朋友用 CSharpCodeProvider 動態(tài)生成程序集導致的程序集泄露,猜測代碼是在哪里 copy 過來的,一定要搞清楚原理才能放心用,合理創(chuàng)建合理釋放。文章來源地址http://www.zghlxwxcb.cn/news/detail-710204.html

記一次 .NET某新能源MES系統(tǒng) 非托管泄露

到了這里,關(guān)于記一次 .NET某新能源MES系統(tǒng) 非托管泄露的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 新能源汽車電控系統(tǒng)

    新能源汽車電控系統(tǒng)

    新能源汽車電控系統(tǒng)主要分為:三電系統(tǒng)電控系統(tǒng)、高壓系統(tǒng)電控系統(tǒng)、低壓系統(tǒng)電控系統(tǒng) 包括整車控制器、電池管理系統(tǒng)、驅(qū)動電機控制器等。 整車控制器VCU 整車控制器作為電動汽車中央控制單元,是整個控制系統(tǒng)的核心,也是各個子系統(tǒng)的調(diào)控中心。 VCU 集成駕駛員意

    2024年02月12日
    瀏覽(19)
  • 基于SSM的新能源汽車在線租賃系統(tǒng)

    基于SSM的新能源汽車在線租賃系統(tǒng)

    末尾獲取源碼 開發(fā)語言:Java Java開發(fā)工具:JDK1.8 后端框架:SSM 前端:采用Vue技術(shù)開發(fā) 數(shù)據(jù)庫:MySQL5.7和Navicat管理工具結(jié)合 服務(wù)器:Tomcat8.5 開發(fā)軟件:IDEA / Eclipse 是否Maven項目:是 隨著科學技術(shù)的飛速發(fā)展, 社會的方方面面、 各行各業(yè)都在努力與現(xiàn)代的先進技術(shù)接軌,通

    2024年02月09日
    瀏覽(21)
  • 典型新能源汽車熱管理系統(tǒng)方案分析

    典型新能源汽車熱管理系統(tǒng)方案分析

    目前行業(yè)具有代表性的熱管理系統(tǒng)有PTC電加熱方案、熱泵方案(特斯拉八通閥熱泵、吉利直接式熱泵)、威馬的柴油加熱方案以及以理想為代表的插電式混動車方案。 小鵬P7整車熱管理方案分析(PTC電加熱方案) 小鵬P7作為小鵬汽車的第2款純電車型,整車熱管理系統(tǒng)采用一體

    2024年04月11日
    瀏覽(23)
  • BMS再進階(新能源汽車電池管理系統(tǒng))

    BMS再進階(新能源汽車電池管理系統(tǒng))

    一文入門BMS(電池管理系統(tǒng))_bms電池管理-CSDN博客 BMS進階(Type-C、PD快充、充電IC、SOC算法、電池管理IC)_充電ic asi aso功能-CSDN博客 本文是上面兩篇博客的續(xù)篇,之前都是講解一些BMS基本原理,接下來將會更加深入地去了解BMS的行業(yè)應(yīng)用及職位的要求。 寫著寫著感覺又不小心

    2024年02月19日
    瀏覽(24)
  • ATE新能源汽車充電樁自動負載測試系統(tǒng)

    ATE新能源汽車充電樁自動負載測試系統(tǒng)

    隨著新能源汽車的普及,充電樁的需求也在不斷增加,為了確保充電樁的性能和安全性,對其進行負載測試是非常重要的。ATE新能源汽車充電樁自動負載測試系統(tǒng)是一種專門用于檢測充電樁性能的設(shè)備,它可以模擬各種實際使用場景,對充電樁進行全面、準確的測試。 系統(tǒng)概

    2024年02月05日
    瀏覽(96)
  • 【開源】基于Vue+SpringBoot的新能源電池回收系統(tǒng)

    【開源】基于Vue+SpringBoot的新能源電池回收系統(tǒng)

    新能源電池回收系統(tǒng)是可持續(xù)發(fā)展的解決方案,旨在鼓勵人們分離和回收廢棄新能源電池,減少環(huán)境污染和資源浪費,新能源電池回收系統(tǒng)涵蓋了城市居民的日常生活,包括收集、分類、處理和收集廢物的完整過程。 本文提出了一種基于Vue技術(shù)的新能源電池回收系統(tǒng),該系統(tǒng)

    2024年02月04日
    瀏覽(37)
  • 基于Python的新能源汽車銷量分析與預測系統(tǒng)

    基于Python的新能源汽車銷量分析與預測系統(tǒng)

    溫馨提示:文末有 CSDN 平臺官方提供的學長 QQ 名片 :) ? ????????基于Python的新能源汽車銷量分析與預測系統(tǒng)是一個使用Python編程語言和Flask框架開發(fā)的系統(tǒng)。它可以幫助用戶分析和預測新能源汽車的銷量情況。該系統(tǒng)使用了關(guān)系數(shù)據(jù)庫進行數(shù)據(jù)存儲,并使用了一些前端技

    2024年01月24日
    瀏覽(81)
  • 基于ssm的新能源汽車在線租賃管理系統(tǒng)論文

    基于ssm的新能源汽車在線租賃管理系統(tǒng)論文

    隨著科學技術(shù)的飛速發(fā)展,社會的方方面面、各行各業(yè)都在努力與現(xiàn)代的先進技術(shù)接軌,通過科技手段來提高自身的優(yōu)勢,新能源汽車在線租賃當然也不能排除在外。新能源汽車在線租賃是以實際運用為開發(fā)背景,運用軟件工程開發(fā)方法,采用SSM技術(shù)構(gòu)建的一個管理系統(tǒng)。整

    2024年03月25日
    瀏覽(18)
  • Java畢業(yè)設(shè)計 SpringBoot 新能源充電樁管理系統(tǒng)

    Java畢業(yè)設(shè)計 SpringBoot 新能源充電樁管理系統(tǒng)

    Java畢業(yè)設(shè)計 SpringBoot 新能源充電樁管理系統(tǒng) SpringBoot 新能源充電樁管理系統(tǒng) 功能介紹 管理員 登錄 驗證碼 注冊 系統(tǒng)用戶管理 普通用戶管理 通知公告管理 留言管理 充電站管理 充電樁管理 充電樁預約 充電管理 訂單管理 修改密碼 普通用戶 登錄 修改個人資料 通知公告查詢

    2024年02月08日
    瀏覽(99)
  • python+vue新能源汽車在線租賃管理系統(tǒng)pycharm項目

    python+vue新能源汽車在線租賃管理系統(tǒng)pycharm項目

    開發(fā)語言:Python 框架:django/flask Python版本:python3.7.7 數(shù)據(jù)庫:mysql ? 數(shù)據(jù)庫工具:Navicat 開發(fā)軟件:PyCharm 在當今高度發(fā)達的信息中,信息管理改革已成為一種更加廣泛和全面的趨勢。 “新能源汽車在線租賃”是基于Mysql數(shù)據(jù)庫,在django程序設(shè)計的基礎(chǔ)上實現(xiàn)的。為確保中國

    2024年02月07日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包