原创 記一次 .NET 某拍攝監控軟件 卡死分析
一:背景 1. 講故事 今天本來想寫一篇 非託管泄露 的生產事故分析,但想着昨天就上了一篇非託管文章,連着寫也沒什麼意思,換個口味吧,剛好前些天有位朋友也找到我,說他們的拍攝監控軟件卡死了,讓我幫忙分析下爲什麼會卡死,聽到這種軟件,讓我不禁
原创 記一次 .NET某新能源MES系統 非託管泄露
一:背景 1. 講故事 前些天有位朋友找到我,說他們的程序有內存泄露,跟着我的錯題集也沒找出是什麼原因,剛好手頭上有一個 7G+ 的 dump,讓我幫忙看下是怎麼回事,既然找到我了那就給他看看吧,不過他的微信頭像有點像 二道販子,不管到我這
原创 記一次 .NET 某儀器測量系統 CPU爆高分析
一:背景 1. 講故事 最近也挺奇怪,看到了兩起 CPU 爆高的案例,且誘因也是一致的,覺得有一些代表性,合併分享出來幫助大家來避坑吧,閒話不多說,直接上 windbg 分析。 二:WinDbg 分析 1. CPU 真的爆高嗎 這裏要提醒一
原创 記一次 .NET 某餐飲小程序 內存暴漲分析
一:背景 1. 講故事 前些天有位朋友找到我,說他的程序內存異常高,用 vs診斷工具 加載時間又太久,讓我幫忙看一下到底咋回事,截圖如下: 確實,如果dump文件超過 10G 之後,市面上那些可視化工具分析起來會讓你崩潰的,除了時間久之外
原创 記一次 .NET 某電力系統 內存暴漲分析
一:背景 1. 講故事 前些天有位朋友找到我,說他生產上的程序有內存暴漲情況,讓我幫忙看下怎麼回事,最簡單粗暴的方法就是讓朋友在內存暴漲的時候抓一個dump下來,看一看大概就知道咋回事了。 二:Windbg 分析 1. 到底是誰吃了內存 這
原创 Windows 虛擬地址 到底是如何映射到 物理地址 的?
一:背景 1. 講故事 我發現有很多的 .NET程序員 寫了很多年的代碼都沒弄清楚什麼是 虛擬地址,更不用談什麼是 物理地址 以及Windows是如何實現地址映射的了?這一篇我們就來聊一聊這兩者之間的聯繫。 二:地址映射研究 1. 找虛擬地
原创 一個超經典 WinForm 卡死問題的最後一次反思
一:背景 1. 講故事 在我分析的 200+ dump 中,同樣會遵循着 28原則,總有那些經典問題總是反覆的出現,有很多的朋友就是看了這篇 一個超經典 WinForm 卡死問題的再反思 找到我,說 WinDbg 攔截 System_Win
原创 記一次 .NET某報關係統 非託管泄露分析
一:背景 1. 講故事 前段時間有位朋友找到我,說他的程序內存會出現暴漲,讓我看下是怎麼事情?而且還告訴我是在 Linux 環境下,說實話在Linux上分析.NET程序難度會很大,難度大的原因在於Linux上的各種開源工具主要是針對 C/C
原创 記一次 .NET某培訓學校系統 內存碎片化分析
一:背景 1. 講故事 前些天有位朋友微信上找到我,說他們學校的Web系統內存一直下不去,讓我看下到底是怎麼回事,老規矩讓朋友生成一個dump文件丟給我,看一下便知。 二:WinDbg 分析 1. 託管還是非託管 要想看託管還是非託管,可以
原创 記一次 .NET 某物流API系統 CPU爆高分析
一:背景 1. 講故事 前段時間有位朋友找到我,說他程序CPU直接被打滿了,讓我幫忙看下怎麼回事,截圖如下: 看了下是兩個相同的程序,既然被打滿了那就抓一個 dump 看看到底咋回事。 二:爲什麼會打滿 1. 真的被打滿了嗎 凡事都要用數
原创 .NET程序的 GDI句柄泄露 的再反思
一:背景 1. 講故事 上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,後者用來定位泄露代碼,後面有朋友反饋兩個問題: GDIView 統計
原创 PerfView專題 (第十六篇): 如何洞察C#託管堆內存的 "黑洞現象"
一:背景 1. 講故事 首先聲明的是這個 黑洞 是我定義的術語,它是用來表示 內存吞噬 的一種現象,何爲 內存吞噬,我們來看一張圖。 從上面的 卦象圖 來看,GCHeap 的 Allocated=852M 和 Committed=16.6
原创 PerfView專題 (第十五篇): 如何洞察 C# 中的慢速方法
一:背景 1. 講故事 在 dump 分析旅程中,經常會遇到很多朋友反饋一類問題,比如: 方法平時都執行的特別快,但有時候會特別慢,怎麼排查? 我的方法第一次執行特別慢,能看到慢在哪裏嗎? 相信有朋友肯定說,加些日誌不就好了,大方向肯定
原创 PerfView專題 (第十四篇): 洞察那些 C# 代碼中的短命線程
一:背景 1. 講故事 這篇文章源自於分析一些疑難dump的思考而產生的靈感,在dump分析中經常要尋找的一個答案就是如何找到死亡線程的生前都做了一些什麼?參考如下輸出: 0:001> !t ThreadCount: 22 Un
原创 用 perfcollect 洞察 Linux 上.NET程序 CPU爆高
一:背景 1. 講故事 如果要分析 Linux上的 .NET程序 CPU 爆高,按以往的個性我肯定是抓個 dump 下來做事後分析,這種分析模式雖然不重但也不輕,還需要一定的底層知識,那有沒有傻瓜式的 CPU 爆高分析方式呢? 相信有很多朋