一線碼農 -
對 .NET FileSystemWatcher引發內存碎片化的 反思
一:背景
1. 講故事
前些天又遇到了一例 FileSystemWatcher 引發的內存碎片化故障,但這個碎片化不是因為經典的 reloadOnChange=true 導致的,所以我覺得有必要做一次深度的反思,供以後遇到類似問題提供技術上的解決方法,這篇我們就來系統的講解下 兩種碎片化方式的調查方法。
二:經典的 FileSystemWatcher 碎片化
1. 測試代碼
這種碎片化是由 rel
.net
,
後端
一線碼農 -
DotMemory系列:5. 如何實現自動化抓取和應用自託管
一:背景
1. 講故事
前面幾篇我們都是手工安裝 dotmemory 軟件,然後在程序的合適時機抓取snapshot,這種方式在絕大多數場景下都沒有問題,但在一些精細化的場景下,如果能夠實現自動化抓取,那就比較🐂👃了,這篇我們就來聊一聊這玩意。
二:如何實現自動化抓取
1. 測試代碼
所謂的自動化抓取,意思就是用代碼來控制 snapshot 的抓取時機,而不是你在 UI 上點來點去,為了方便測
.net
,
後端
一線碼農 -
DotMemory系列:4. 如何分析進程的轉儲文件
一:背景
1. 講故事
前面幾篇文章説的都是對進程採集 snapshot 文件,但這種方式的前提需要在目標機器上運行 DotMemory 相關組件,這在很多生產環境下很難做到,我知道很多醫療,金融生產環境,部署一個外來文件都需要層層審批,尤其像 dotmemory 這種商業軟件,想上去門到沒有。。。
目前主流的做法就是生成dump文件拿到線下分析,如果 dotmemory 不集成這塊生態,那就是自
.net
,
後端
一線碼農 -
DotMemory系列:3. 堆碎片化引發的內存暴漲分析
一:背景
1. 講故事
前面兩篇我們講的都是通過掛引用根的方式導致的內存暴漲,在快速檢測台上能夠一眼就看出是什麼類型的Type導致的,分析難度稍微較低,在真實的dump分析場景下,也會存在對象偏小而內存暴漲的情況,一般的新手會被這種場景搞懵逼,這篇就來分享這種奇葩的情況。
二:內存暴漲分析
1. 問題代碼
為了方便演示,我們做這樣的一個案例,現在的 .NET8 的SOH一個segment是 4M,
.net
,
後端
一線碼農 -
DotMemory系列:2. 事件泄露引發的內存暴漲分析
一:背景
1. 講故事
事件泄露導致的內存暴漲,説實話我以前是不敢相信的,因為我認為沒人會寫這樣的代碼,但現實往往都會打臉,還是太年輕了,今年年中的時候還真給遇到了,也算是無語啦,這一篇我們就來聊一聊如何通過 DotMemory 來一探究竟。
二:內存暴漲分析
1. 問題代碼
為了方便講述,先來一段測試代碼,代碼非常簡單,也就調用 1kw 次 SomeOperation 方法,調用完之後使用 G
.net
,
後端
一線碼農 -
DotMemory系列:1. 終結隊列積壓引發的內存暴漲分析
一:背景
1. 講故事
説實話本來是不想寫這個系列的,因為我潛意識裏覺得這款工具就像美圖秀秀一樣,拉低專業人士的檔次,但奈何在訓練營裏我需要用到 dottrace 這款工具,而我向官方申請再續了一年免費的Pack套件也給我通過了,所以我覺得要對得起他們,得要寫點什麼,截圖如下:
這幾天我也仔細看了下DotMemory的文檔,發現還是有一些可圈可點的地方,畢竟美圖秀秀也有美圖秀秀的閃光點,在某些場
.net
,
後端
一線碼農 -
記一次 .NET 某理財管理客户端 OOM溢出分析
一:背景
1. 講故事
這是訓練營裏的學員找到我的,讓我幫忙看下為什麼他的客户程序會偶發的出現 報錯彈框,由於dump比較敏感,這裏就不截圖發出來了,由於是錯誤彈框,並不會出現程序崩潰,而且朋友在日誌中也看到了 OOM 異常,就是因為這個 OOM 異常導致了後續流程的 報錯彈框,説這個程序的內存還行,在業務代碼中用了 try catch 吞掉異常了,讓我幫忙看下。
由於 OOM dump沒到手,而
.net
,
後端
一線碼農 -
記一次 .NET 某醫聯體管理系統 崩潰分析
一:背景
1. 講故事
這段時間都在跑外賣,感覺好久都沒寫文章了,今天繼續給大家帶來一篇崩潰類的生產事故,這是微信上有位老朋友找到我的,讓我幫忙看下為啥崩潰了,dump也在手,接下來就可以一頓分析。
二:崩潰分析
1. 為什麼會崩潰
雙擊打開dump文件,會看到崩潰信息通覽,參考如下:
Executable search path is:
Windows 10 Version 17763 MP
.net
,
後端
一線碼農 -
記一次 .NET 某光放測試系統 崩潰分析
一:背景
1. 講故事
微信好友裏有位朋友找到我,説他部署在windows上的程序,用debug模式正常,但用 release 模式跑程序就崩潰,如果把程序切到 .NET6 的話又都正常,所以很迷茫,讓我看看怎麼回事,哈哈,這種問題直接抓dump分析就好了。
二:崩潰分析
1. 為什麼會崩潰
分析過崩潰程序的朋友應該知道,不管是託管還是非託管崩潰,先用 !analyze -v 命令開路,簡化輸出如
.net
,
後端