記一次生產環境內存暴漲分析(工具:vs2022)
前情提要:由于負責的業務主要使用時間為凌晨,上周連續幾天半夜程序卡死了,正跟周公下棋呢,一個電話打過來,前幾次都是重啟iis后解決了,最后實在忍不了了,半夜起來以后分析了一波,終于找到問題。
程序為:.net 4.6,部署在windows server 2016上,設置了32位為true
1、發現程序無法訪問的時候,打開任務管理器,找到iis的進程,進程名稱 IIS Worker Process,再右鍵->創建轉儲文件->會得到一個dmp文件

當時忘記截圖了,這個圖是補的,當時cpu占70%多到90%多,內存占3000mb多
2、把上一步得到的dmp文件用vs2022打開
3、點擊調試托管內存(這一步需要一點時間,請耐心等待)

4、按照大小排序后,查看最大的幾個

5、從大到小來看,以最大的對象為例,右鍵->查看實例

6、

7、



8、


這個DataTable里有104w數據,正好是上面那張表的整張表的數據,其他的幾個大對象,也都是這張表整張表的數據
9、

一個個尋找以后,終于找到了出問題的接口,同事寫了if以后沒有寫else,有個人版本的app訪問接口時會沒有進if,查詢了整張表的數據出來。此時真相大白,終于可以安心睡覺了。

浙公網安備 33010602011771號