精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

記一次 .NET 某風控管理系統內存泄漏分析

存儲 存儲軟件
從源碼邏輯看,我猜測朋友將 GetConfig 方法標記成 static 后就以為是單例化了,再次調用不會重復 new AppConfig(settingfile),所以問題就出在這里。

[[432706]]

一、背景

1. 講故事

上個月中旬,星球里的一位朋友在微信找我,說他的程序跑著跑著內存會不斷的緩慢增長并無法釋放,尋求如何解決 ?

得,看樣子星球還得好好弄!!!不管怎么說,先上 windbg 說話。

二、Windbg 分析

1. 經驗推理

從朋友的截圖看,有大量的 8216 字節的 byte[],這表示什么呢?追隨本系列的朋友應該知道,有一篇 某三甲醫院 的內存暴漲的dump中,也同樣有此 size= (8216-24=8192) 的 byte[] 數組, 他的問題是 Oracle 中讀取某大字段時sdk里的 OraBuf 出了問題,換句話說,這肯定又是底層或者第三方庫中的池對象搞出來的東西,接下來從 托管堆 看起。

2. 查看托管堆

  1. 0:000> !dumpheap -stat 
  2. Statistics
  3. 00007ffe107248f0   483707     15478624 System.Threading.PreAllocatedOverlapped 
  4. 00007ffe1079c160   483744     15479808 System.Threading.ThreadPoolBoundHandle 
  5. 00007ffe1079cff8   483701     23217648 System.Threading._IOCompletionCallback 
  6. 00007ffe106e7a90   483704     23217792 Microsoft.Win32.SafeHandles.SafeFileHandle 
  7. 00007ffe1079b088   483703     30956992 System.IO.FileSystemWatcher+AsyncReadState 
  8. 00007ffe1079ceb0   483707     34826904 System.Threading.OverlappedData 
  9. 00007ffe1079ccb0   483707     34826904 System.Threading.ThreadPoolBoundHandleOverlapped 
  10. 0000016c64651080   245652   1473128080      Free 
  11. 00007ffe105abf30   488172   3977571092 System.Byte[] 

掃完托管堆,臥槽 ,byte[] 沒吸引到我,反而被 System.IO.FileSystemWatcher+AsyncReadState 吸引到了,畢竟被 System.IO.FileSystemWatcher 折騰多次了,它已經深深打入了我的腦海。。。畢竟讓程序卡死,讓句柄爆高的都是它。。。這一回八成又是它惹的禍,看樣子還是有很多程序員栽在這里哈。

為做到嚴謹,我還是從最大的 System.Byte[] 入手,按size對它進行分組再按totalsize降序,丑陋的腳本我就不發了,直接上腳本的輸出結果。

  1. !dumpheap -mt 00007ffe105abf30 
  2. size=8216,count=483703,totalsize=3790M 
  3. size=8232,count=302,totalsize=2M 
  4. size=65560,count=6,totalsize=0M 
  5. size=131096,count=2,totalsize=0M 
  6. size=4120,count=11,totalsize=0M 
  7. size=56,count=301,totalsize=0M 
  8. size=88,count=186,totalsize=0M 
  9. size=848,count=16,totalsize=0M 
  10. size=152,count=85,totalsize=0M 
  11. size=46,count=242,totalsize=0M 
  12. size=279,count=38,totalsize=0M 
  13.  
  14. !dumpheap -mt 00007ffe105abf30 -min 0n8216 -max 0n8216 -short 
  15.  
  16. 0000016c664277f0 
  17. 0000016c66432a48 
  18. 0000016c6648ef88 
  19. 0000016c6649daa8 
  20. 0000016c6649fb00 
  21. 0000016c664a8b90 
  22. ... 

從輸出結果看,size=8216 的 byte[] 有 48w 個,然后腳本也列出了一些 8216 大小的 address 地址,接下來用 !gcroot 看下這些地址的引用。

  1. 0:000> !gcroot 0000016c664277f0 
  2. HandleTable: 
  3.     0000016C65FC28C0 (async pinned handle) 
  4.     -> 0000016C6628DEB0 System.Threading.OverlappedData 
  5.     -> 0000016C664277F0 System.Byte[] 
  6.  
  7. Found 1 unique roots (run '!gcroot -all' to see all roots). 
  8. 0:000> !gcroot 0000016c667c80d0 
  9. HandleTable: 
  10.     0000016C65FB7920 (async pinned handle) 
  11.     -> 0000016C663260F8 System.Threading.OverlappedData 
  12.     -> 0000016C667C80D0 System.Byte[] 

從輸出中可以看到這些 byte[] 都是 async pinned,也就是當異步IO回來的時候需要給 byte[] 填充的存儲空間,接下來我們看看如何通過 OverlappedData 找到源碼中定義為 8192 大小的 byte[] 地方。

如果你了解 FileSystemWatcher ,反向查找鏈大概是這樣的 OverlappedData -> ThreadPoolBoundHandleOverlapped -> System.IO.FileSystemWatcher+AsyncReadState -> Buffer[], 這中間涉及到 ThreadPool 和 SafeHandle 的綁定。

  1. 0:000> !do 0000016C663260F8 
  2. Name:        System.Threading.OverlappedData 
  3. MethodTable: 00007ffe1079ceb0 
  4. EEClass:     00007ffe107ac8d0 
  5. Size:        72(0x48) bytes 
  6. File:        C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.10\System.Private.CoreLib.dll 
  7. Fields: 
  8.               MT    Field   Offset                 Type VT     Attr            Value Name 
  9. 00007ffe106e3c08  40009ce        8  System.IAsyncResult  0 instance 0000000000000000 _asyncResult 
  10. 00007ffe104a0c68  40009cf       10        System.Object  0 instance 0000016c66326140 _callback 
  11. 00007ffe1079cb60  40009d0       18 ...eading.Overlapped  0 instance 0000016c663260b0 _overlapped 
  12. 00007ffe104a0c68  40009d1       20        System.Object  0 instance 0000016c667c80d0 _userObject 
  13. 00007ffe104af508  40009d2       28                  PTR  0 instance 00000171728f66e0 _pNativeOverlapped 
  14. 00007ffe104aee60  40009d3       30        System.IntPtr  1 instance 0000000000000000 _eventHandle 
  15. 00007ffe104ab258  40009d4       38         System.Int32  1 instance                0 _offsetLow 
  16. 00007ffe104ab258  40009d5       3c         System.Int32  1 instance                0 _offsetHigh 
  17. 0:000> !do 0000016c663260b0 
  18. Name:        System.Threading.ThreadPoolBoundHandleOverlapped 
  19. MethodTable: 00007ffe1079ccb0 
  20. EEClass:     00007ffe107ac858 
  21. Size:        72(0x48) bytes 
  22. File:        C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.10\System.Private.CoreLib.dll 
  23. Fields: 
  24.               MT    Field   Offset                 Type VT     Attr            Value Name 
  25. 00007ffe1079ceb0  40009d6        8 ...ng.OverlappedData  0 instance 0000016c663260f8 _overlappedData 
  26. 00007ffe1079b818  40009c0       10 ...ompletionCallback  0 instance 0000016f661ab8a0 _userCallback 
  27. 00007ffe104a0c68  40009c1       18        System.Object  0 instance 0000016c667ca0e8 _userState 
  28. 00007ffe107248f0  40009c2       20 ...locatedOverlapped  0 instance 0000016c66326090 _preAllocated 
  29. 00007ffe104af508  40009c3       30                  PTR  0 instance 00000171728f66e0 _nativeOverlapped 
  30. 00007ffe1079c160  40009c4       28 ...adPoolBoundHandle  0 instance 0000000000000000 _boundHandle 
  31. 00007ffe104a7238  40009c5       38       System.Boolean  1 instance                0 _completed 
  32. 00007ffe1079b818  40009bf      738 ...ompletionCallback  0   static 0000016f661ab990 s_completionCallback 
  33. 0:000> !do 0000016c667ca0e8 
  34. Name:        System.IO.FileSystemWatcher+AsyncReadState 
  35. MethodTable: 00007ffe1079b088 
  36. EEClass:     00007ffe107a9dc0 
  37. Size:        64(0x40) bytes 
  38. File:        C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.10\System.IO.FileSystem.Watcher.dll 
  39. Fields: 
  40.               MT    Field   Offset                 Type VT     Attr            Value Name 
  41. 00007ffe104ab258  400002b       30         System.Int32  1 instance                1 <Session>k__BackingField 
  42. 00007ffe105abf30  400002c        8        System.Byte[]  0 instance 0000016c667c80d0 <Buffer>k__BackingField 
  43. 00007ffe106e7a90  400002d       10 ...es.SafeFileHandle  0 instance 0000016c66326028 <DirectoryHandle>k__BackingField 
  44. 00007ffe1079c160  400002e       18 ...adPoolBoundHandle  0 instance 0000016c66326058 <ThreadPoolBinding>k__BackingField 
  45. 00007ffe107248f0  400002f       20 ...locatedOverlapped  0 instance 0000016c66326090 <PreAllocatedOverlapped>k__BackingField 
  46. 00007ffe1079b8c8  4000030       28 ...eSystem.Watcher]]  0 instance 0000016c66326078 <WeakWatcher>k__BackingField 

上面的 k__BackingField 就是當初丟給 OverlappedData 作為 異步IO 讀寫的緩沖,然后看下 System.IO.FileSystemWatcher+AsyncReadState 的源碼。

有了這些原理之后,接下來就可以問朋友是否有對 appsettings 設置了 reloadonchange=true 的情況,朋友找了下代碼,寫法大概如下:

  1. public object GetxxxFlag() 
  2.     string value = AppConfig.GetConfig("appsettings.json").GetValue("xxxx""0"); 
  3.  
  4.     return new 
  5.     { 
  6.         state = 200, 
  7.         data = value 
  8.     }; 
  9.  
  10. public class AppConfig 
  11.     public static AppConfig GetConfig(string settingfile = "appsettings.json"
  12.     { 
  13.         return new AppConfig(settingfile); 
  14.     } 
  15.  
  16. public class AppConfig 
  17.     private AppConfig(string settingfile) 
  18.     { 
  19.         _config = new ConfigurationBuilder().AddJsonFile(settingfile, optional: true, reloadOnChange: true).Build(); 
  20.         _settingfile = settingfile; 
  21.     } 

從源碼邏輯看,我猜測朋友將 GetConfig 方法標記成 static 后就以為是單例化了,再次調用不會重復 new AppConfig(settingfile),所以問題就出在這里。

不過有意思的是,前面二篇的 FileSystemWatcher 都會造成程序卡死,那這一篇為啥沒有呢?恰好他沒有在程序根目錄中放日志文件,不然的話。。。,可萬萬沒想到逃過了卡死卻沒逃過一個 watcher 默認 8byte 空間的靈魂拷問。。。

三、總結 

總的來說,設置 reloadOnChange: true 一定要慎重, 可能它會造成你的程序卡死,句柄泄漏,內存泄漏 等等!!!

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2022-01-17 21:28:36

管理系統.NET

2023-06-29 17:55:00

.NET日志WinDbg

2022-09-13 17:46:19

STA模式內存

2022-10-09 10:47:37

NET視覺軟件

2023-07-06 10:11:38

.NET模式dump

2024-03-28 12:56:36

2023-04-06 10:52:18

2024-03-26 00:44:53

.NETCIM系統

2023-03-26 20:24:50

ERP網站系統

2024-07-09 11:51:20

Windows線程池源碼

2024-07-01 13:00:24

.NET網絡邊緣計算

2024-11-29 10:06:59

2025-10-29 01:11:00

.NET系統windows

2025-09-05 02:22:00

.NETCRM物流行業

2024-06-04 10:54:34

.NET代碼程序

2024-08-08 11:21:01

2023-06-26 00:12:46

2024-12-27 13:31:18

.NETdump調試

2022-02-08 17:17:27

內存泄漏排查

2021-10-09 10:24:08

NET爬蟲內存
點贊
收藏

51CTO技術棧公眾號

成人情视频高清免费观看电影| 日韩禁在线播放| 最近免费观看高清韩国日本大全| 亚洲成人黄色片| 午夜亚洲性色福利视频| 最近2019免费中文字幕视频三| 91欧美精品午夜性色福利在线 | 第四色中文综合网| 欧美性猛交xxxx免费看漫画| 性欧美18一19内谢| 亚洲三区在线观看无套内射| 久久国产精品无码网站| 777午夜精品福利在线观看| 99在线视频免费| 麻豆电影在线播放| 成人自拍视频在线| 国产欧美精品一区二区三区介绍| 三叶草欧洲码在线| 黄色小说在线播放| 欧美激情综合五月色丁香| 国产高清精品一区二区| 中文字幕乱码视频| 国产精品日本| 色综合色综合久久综合频道88| 少妇人妻好深好紧精品无码| 超碰精品在线| 日韩精品一区二区三区四区视频| wwww.国产| av电影在线观看网址| 日本欧洲一区二区| 91av视频在线观看| 免费观看一级视频| 亚洲九九在线| 中文字幕亚洲情99在线| 黄色在线观看av| 久久99国产精品久久99大师| 精品福利在线视频| 亚洲中文字幕无码一区二区三区| av基地在线| 国产偷国产偷亚洲高清人白洁| 国产日韩欧美一区二区| 国产黄色av网站| 狠狠爱综合网| 欧美人在线观看| 99精品中文字幕| 欧美特黄不卡| 日韩一区二区三区av| 99sesese| 99久久这里有精品| 欧美精品在线视频| 精品亚洲视频在线| 四虎国产精品免费久久| 欧美午夜精品免费| 天堂网在线免费观看| 日韩三区免费| 欧美视频一二三区| 成人免费在线观看视频网站| 精品123区| 欧美三级电影在线看| 蜜臀av免费观看| 久久久久久一区二区三区四区别墅| 欧美日韩在线直播| 国产美女18xxxx免费视频| 国产精品亚洲四区在线观看| 日韩一级视频免费观看在线| 99精品视频免费版的特色功能| 欧美大片91| 亚洲激情久久久| 中文字幕第20页| 久久久精品久久久久久96| 久久成人在线视频| 不卡的免费av| 丝袜诱惑亚洲看片| 国产日韩在线一区| 国产哺乳奶水91在线播放| 国产大片一区二区| 精品久久精品久久| 黄视频在线观看免费| 国产精品日韩成人| 人人妻人人做人人爽| 天堂在线中文网官网| 欧美性大战久久久久久久蜜臀| 国产亚洲视频一区| 大陆精大陆国产国语精品 | 国产视频精品久久| 最近日韩中文字幕| 亚洲熟妇国产熟妇肥婆| 成人av集中营| 精品日韩一区二区三区| 色无极影院亚洲| 亚洲国产日韩欧美在线| 国外成人在线直播| 亚洲一区二区视频在线播放| 9久re热视频在线精品| 国产不卡视频在线| 国产xxxxxx| 国产亚洲精品免费| 成人免费a级片| 亚洲a∨精品一区二区三区导航| 91精品国产色综合久久| 中文字幕国产专区| 欧美久久99| 国产精品美女免费看| 亚洲第一页综合| 国产精品三级视频| 国产精品秘入口18禁麻豆免会员 | 91国产美女在线观看| 亚洲视频中文字幕在线观看| hitomi一区二区三区精品| 亚洲精品在线免费| 国产中文在线播放| 91精品国产综合久久婷婷香蕉 | www.超碰97.com| 另类在线视频| 九九精品在线视频| 中文字幕欧美色图| 久久久综合九色合综国产精品| 神马午夜伦理影院| 欧美在线一级| 亚洲日韩欧美视频| 日韩精品视频免费看| 国产乱人伦精品一区二区在线观看| 国产美女精品视频免费观看| 国产日韩欧美精品| 国产情侣在线播放| 久久精品人人爽人人爽| 草b视频在线观看| 国产精品一区二区精品| 深夜成人在线观看| 波多野结衣绝顶大高潮| 91免费视频网| 国产免费黄色小视频| 日韩欧洲国产| 久热爱精品视频线路一| 国产精品久久无码一三区| 久久久久久久电影| 中文字幕乱码人妻综合二区三区| 欧美一区在线观看视频| 久久艳片www.17c.com| 国产精品久久久久久免费免熟| 国产精品午夜在线观看| 一区二区三区入口| 欧美日韩国产一区二区三区不卡 | 久久国产精品免费观看| 国产亚洲精彩久久| 日韩在线观看免费高清完整版| 免费av中文字幕| 久久精品在这里| 久久久久久久片| 欧美中文字幕一区二区| 在线激情影院一区| 日韩影院一区二区| 精品制服美女久久| 一区二区在线不卡| 亚洲三级在线| 久久成人综合视频| 国产成人三级在线播放| 一区二区三区高清在线| 日日碰狠狠躁久久躁婷婷| 加勒比色老久久爱综合网| 韩国19禁主播vip福利视频| 7799精品视频天天看| 久久影院视频免费| 少妇一级淫免费播放| 亚洲成av人片乱码色午夜| 91在线色戒在线| 五月天激情在线| 色先锋久久av资源部| 亚洲理论片在线观看| 蜜桃av噜噜一区二区三区小说| 一区二区视频在线播放| 中文字幕久久精品一区二区| 男人的天堂亚洲一区| 国产国语videosex另类| 日韩在线免费电影| 欧美一级一级性生活免费录像| 久久久国产成人| 久久综合中文字幕| 色播五月激情五月| 黄色亚洲免费| 日本视频一区在线观看| 在线视频成人| 性欧美长视频免费观看不卡| 国产亚洲依依| 日韩亚洲欧美中文三级| 国产情侣在线视频| 欧美国产一区在线| 国产人妻精品午夜福利免费| 日日夜夜精品视频免费| 四虎永久免费网站| 校花撩起jk露出白色内裤国产精品 | 91豆花视频在线播放| 国产亚洲精品久久久久久| 国产av一区二区三区| 色综合天天综合| 午夜写真片福利电影网| 国产欧美一区二区精品久导航| 91精产国品一二三| 久久精品国产精品亚洲综合| 日本在线xxx| 亚洲男女av一区二区| 麻豆蜜桃91| 精品91福利视频| 国产经典一区二区| 超碰在线cao| 午夜视频在线观看一区二区| 在线观看av不卡| 超碰在线超碰在线| 老鸭窝91久久精品色噜噜导演| 亚洲一区精彩视频| 台湾佬综合网| 草莓视频一区| 亚洲欧美一级| 国产成人拍精品视频午夜网站| 青春草在线免费视频| 中文字幕免费国产精品| 亚洲av电影一区| 欧美mv和日韩mv国产网站| 亚洲一区中文字幕在线| 色乱码一区二区三区88| 中文在线观看免费网站| 一区二区三区四区激情| 免费中文日韩| 特黄视频在线观看| 91精品麻豆日日躁夜夜躁| 五月婷婷丁香在线| 色婷婷一区二区三区四区| 国产无码精品在线播放| 一区二区三区欧美亚洲| 无码黑人精品一区二区| 久久精品一区蜜桃臀影院| 亚洲色图14p| aa级大片欧美| 男人网站在线观看| 国产成人精品www牛牛影视| 国产精品嫩草影院8vv8| 六月丁香婷婷色狠狠久久| 久久久久久久少妇| 日本中文字幕一区二区视频| 国产极品美女高潮无套久久久| 国产亚洲激情| 日韩视频第二页| 久久天堂成人| 国产成人精品视频ⅴa片软件竹菊| 另类亚洲自拍| 欧在线一二三四区| 日韩av电影天堂| www.这里只有精品| 国产综合一区二区| 亚洲色图欧美自拍| 国产精品一区二区在线观看网站| 肉色超薄丝袜脚交| 国产宾馆实践打屁股91| 年下总裁被打光屁股sp | 中文字幕一二三区| 国产不卡视频在线播放| 国产精品入口麻豆| 97精品国产露脸对白| www.久久国产| 日本一区二区三区dvd视频在线| 99久久久无码国产精品性| 久久久久久97三级| 黄色片网站在线播放| 中文字幕一区三区| 欧美人妻一区二区| 狠狠色噜噜狠狠狠狠97| 午夜久久久久久久久久影院| 欧美视频日韩视频在线观看| 91久久精品无码一区二区| 日韩一区二区精品在线观看| 色窝窝无码一区二区三区成人网站| 国产视频精品免费播放| wwwww在线观看免费视频| 久久艹在线视频| 高潮在线视频| 国产精品久久久久久久7电影| 曰本一区二区| 精品一区二区三区日本| 日韩av在线中文字幕| 17c丨国产丨精品视频| 国产美女久久| 日韩视频国产视频| 国内老熟妇对白xxxxhd| 日韩精品中文字幕视频在线| 91吃瓜网在线观看| 欧美极度另类性三渗透| 欧洲精品一区二区三区| 92国产精品视频| 亚洲日产av中文字幕| 中文字幕一区二区三区四区五区人 | 国产日本亚洲| 欧美日韩大片一区二区三区| 伊人成综合网| 青青在线视频观看| 国产精品一区二区在线观看不卡| 熟妇高潮精品一区二区三区| 中文字幕日本乱码精品影院| 欧美三级一区二区三区| 欧美猛男男办公室激情| 亚洲aⅴ乱码精品成人区| 另类专区欧美制服同性| 日韩影片中文字幕| 国产精品日韩高清| 99久久夜色精品国产亚洲96| 18禁免费无码无遮挡不卡网站| 国内成人精品2018免费看| japanese中文字幕| 亚洲国产精品一区二区www在线| 中文字幕精品无码亚| 亚洲男子天堂网| av中文在线资源| 91免费看片网站| 成人直播大秀| 国产淫片av片久久久久久| 成人18精品视频| 国产波霸爆乳一区二区| 欧美日韩精品欧美日韩精品一综合| 五月激情丁香婷婷| 久久久久久亚洲精品中文字幕| 91嫩草国产线观看亚洲一区二区| 欧美中日韩一区二区三区| 91久久夜色精品国产九色| 中文字幕人妻无码系列第三区| 国产精品毛片a∨一区二区三区| 亚洲天堂男人av| 国产午夜精品久久久| heyzo高清在线| 成人黄色片视频网站| 欧美成人69| 免费黄频在线观看| 日韩一区在线播放| 91片黄在线观看喷潮| 在线午夜精品自拍| 嫩草伊人久久精品少妇av杨幂| 日本一区二区免费看| 久久一区欧美| a级大片在线观看| 色系网站成人免费| 久草在线免费福利资源| 日本久久久久亚洲中字幕| 亚瑟一区二区三区四区| 青青草原av在线播放| 亚洲精品永久免费视频| 国产精品激情av电影在线观看| 亚洲va久久久噜噜噜久久| 浮妇高潮喷白浆视频| av一二三不卡影片| 天堂中文字幕在线观看| 精品视频偷偷看在线观看| 日韩脚交footjobhd| 欧美成人手机在线| 精品国产不卡一区二区| 欧洲金发美女大战黑人| 国产精品综合二区| 久久午夜鲁丝片午夜精品| 欧美精品一区二区不卡| 欧美久久天堂| 日本一区高清不卡| 奇米一区二区三区av| 国内毛片毛片毛片毛片毛片| 欧美日韩久久久一区| 成年人网站在线| 国产欧美欧洲| 首页国产欧美日韩丝袜| 天美传媒免费在线观看| 欧美一级电影网站| 99thz桃花论族在线播放| 免费国产在线精品一区二区三区| 日韩精品欧美精品| 在线看的片片片免费| 精品久久久三级丝袜| 在线免费日韩片| 亚洲一区二区精品在线观看| 国产成人午夜精品影院观看视频| 国产污片在线观看| 亚洲天堂开心观看| 成人黄色91| 人体内射精一区二区三区| 国产偷v国产偷v亚洲高清| av网站免费播放| 欧美在线观看网址综合| 国产精品成人a在线观看| 久草视频福利在线| 欧美午夜视频网站| 黄页在线观看免费| 色综合视频二区偷拍在线| 国产91精品久久久久久久网曝门| 人妻 日韩精品 中文字幕| 久久精品国产成人| 日韩av首页| 嫩草影院中文字幕| 国产视频视频一区| 亚洲欧美激情在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 国产劲爆久久| 在线观看日本一区二区| 精品国产电影一区| www.久久ai| 手机看片福利永久国产日韩| 成人av资源网站|