dotnet core 高CPU定位 dotnet-dump篇


在windows操作系統,我們可以用Windbg定位,那在linux微軟也提供dotnet-dump定位

准備

# 注冊 Microsoft 密鑰和源
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

# 安裝 .NET Core SDK
yum install dotnet-sdk-3.1

# 驗證是否安裝成功
dotnet --version

dotnet tool install -g dotnet-dump

 

 

以下定位代碼

 

 1) centos 7 編譯代碼並運行 進程號 8936

 

 

2) top -Hp 8936   顯示8936進程中 線程8936 CPU 99.3%

 

 

 4) dotnet-dump collect -p 8936 -o mytest.dump

 

 5) 分析dump 文件這里windowdbg 類似 dotnet-dump analyze mytest.dump

 

 

 6) dumpdomain --顯示所有 AppDomain 和域中的所有程序集的信息  其中dotnet core 和.net framwork 的  AppDomain 有些差別, .net framwork 有3個程序域,dotnetcore 只有2個,少一個共享程序域.

 

 7)言歸正傳,看一下成活線程 clrthreads -live   

 

 8) threads 

 

 9)setthread 0   #切換8936顯程編號 0  並查看

      clrstack -a  #當前線程托管代碼的堆棧跟蹤

 找出當前線程計算stack情況調用Test2 

 10) r 也可以進一步看 寄存器執行在做什么(匯編指令),根據linux 內核dumpstack關系深入分析

 

 

當前線程


免責聲明!

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



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