.net core dump分析


服務器上如果出現cpu內存飽滿,找不到原因,那么dump文件分析必不可少。

起初是想在linux下調試.net core 的dump,但是環境一直無法安裝 搞了許久沒搞出來,其次文章太少了,google幾頁都變紫色了,園友大佬知道可以給小弟解惑下幾個問題。

  1. Linux分析高版本的.net core必須是要lldb3.9.0 這個就很煩了。我的linux的centos7.4。沒有現成的可以下載,只能自己編譯。編譯數小時最終發現並沒有安裝成功,大佬們有沒有腳本能直接安裝lldb3.9.0。開始都是按照https://www.cnblogs.com/calvinK/p/9263696.html 文章來,結果失敗了,沒有報錯。也感謝這個博主幫助了解決不少問題。
  2. .net core console可以創建dump文件,但是asp.net core 無法創建dump文件,官方issue:https://github.com/dotnet/coreclr/issues/21484。 官方解決后,合並到了release 2.2. 也就是說我自己還要編譯corelcr。而這個coreclr編譯也需要特定版本基本也是3.9.0 https://github.com/dotnet/coreclr/blob/master/Documentation/building/linux-instructions.md

Windows下.net core dump分析

  1. 下載工具windbg 地址:https://www.microsoft.com/zh-cn/p/windbg-preview/9pgjgd53tn86?SilentAuth=1&rtc=1&activetab=pivot:overviewtab
  2. Dump文件:任務管理;選擇w3wp.exe;右鍵;創建轉儲文件 這里項目用core的一個console項目舉例 代碼如下

  3. 用windbg打開dump文件
  4. 加載.net core版的sos擴展插件。輸入: .load C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.1\sos

    注意:framework和.net core都有提供相應版本的sos.dll,在load加載到windbg的時候請選擇正確的地址,這里加載進去時2.2.1版本。

    插件介紹:https://docs.microsoft.com/en-us/dotnet/framework/tools/sos-dll-sos-debugging-extension

  5. 加載完畢使用!help 查看是否加載成功,並查看命令介紹

  6. 查找線程 !threads

  7. 指定線程 ~{線程編號}s 例如22號線程:~22s 。 查找該線程的堆棧信息 !clrstack

  8. 利用!dumpheap 查找所有gc中所有的對象占用內存的大小並且排序。 (可以利用!help dumpheap 查看相關介紹)

  9. 利用  !dumpheap -min 85000 查看LOH對象來判斷內存泄漏的對象 LOH 對象介紹: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap

    這里測試項目沒有該對象

  10. 利用!dumpheap -strings 來查看指定對象在應用中的使用 這里用string 舉例

  11. 利用!dumpheap -type Console 查看指定類型 在應用中的使用 這里用console舉例

  12. 利用!do {線程編號}來查看該改對象在這個線程中的使用

     

     

    還有很多的命令,再補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM