.net core dump分析

服務器上若是出現cpu內存飽滿,找不到緣由,那麼dump文件分析必不可少。html

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

  1. Linux分析高版本的.net core必須是要lldb3.9.0 這個就很煩了。個人linux的centos7.4。沒有現成的能夠下載,只能本身編譯。編譯數小時最終發現並無安裝成功,大佬們有沒有腳本能直接安裝lldb3.9.0。開始都是按照http://www.javashuo.com/article/p-cnrvzanz-db.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分析git

  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版本。github

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

  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 {線程編號}來查看該改對象在這個線程中的使用

     

     

    還有不少的命令,再補充asp.net

相關文章
相關標籤/搜索