隨着netcore應用在linux上部署的應用愈來愈多,碰到cpu 100%,內存暴漲的狀況也一直偶有發生,在windows平臺下進程管理器右鍵轉儲,下載到本地使用windbg或者直接vs分析都比較方便。而在linux平臺下由於一直接觸的不深,因此對這一塊也一直沒有比較好的瞭解。因此接下來的文章將對在centos7下安裝lldb,生成轉儲以及調試分析進行一些簡單說明。
還有就是通常產線的機器也不太會有能夠直接調試的機會,因此真出現問題也只能在產線機器dump進程,而後下載到本地來慢慢分析。html
環境說明:
os:centos7
dotnet :2.1.1。查看官方文檔2.0.0只能使用lldb 3.6;2.1以上必須是3.9.0;因此特別要注意版本問題,一個是createdump 2.0的有bug會失敗。二個是dotnet版本和lldb版本要匹配
被調試分析的應用也是用2.1跑起來的。python
yum install dotnet-sdk-2.1 dotnet new mvc vi /mvc.csproj #netcoreapp2.0 to netcoreapp2.1 #PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" to Version="2.1.1" dotnet restore dotnet build dotnet ./bin/Debug/netcoreapp2.1/mvc.dll
centos7 升級GCC版本到7.3.0
centos7 安裝cmakelinux
最開始直接使用給力網友的腳本進行安裝(腳本地址查看文章結尾參考資料),後發現3.9.1不能調試分析netcore應用,必需要3.9.0,因此在給力網友的腳本上略做修改後使用。修改後腳本地址https://github.com/czd890/shell/blob/master/llvm_clang_lldb/3.9.0/llvm_clang_install.sh。主要修改幾個地方:把lldb,libunwind移動到build_llvm_toolchain中,一次性安裝。check_and_download方法中檢查本地是否已下載源碼包的檢查略做修改,只判斷指定版本,編譯的時候修改成make -j8(我本地機器8核)。git
腳本大概思路就是下載以下所表示的組件全部源碼,除llvm外的其餘組件源代碼解壓到llvm/tools目錄下,這樣子源代碼就所有準備好
BUILD_TARGET_COMPOMENTS="llvm clang compiler_rt libcxx libcxxabi clang_tools_extra lldb lld libunwind";
接下來就是編譯的過程了。github
#安裝一些必要的依賴組件 yum install libedit-devel libxml2-devel ncurses-devel python-devel swig #執行根據給力網友的腳本修改後的腳本
固然若是腳本下載速度慢,也是能夠本身下載後上傳的目錄的。具體下載地址查看文章尾部參考資料 llvm,clang,lldb源代碼下載地址(3.9.0)
準備源代碼差很少就以下圖。而後 sh llvm_clang_install.sh開始執行腳本;
默認安裝目錄在 PREFIX_DIR=/usr/local/llvm-$LLVM_VERSION;。也就是是 /usr/local/llvm-3.9.0;能夠在腳本的最開始對此進行修改。
開始執行,又是一段漫長的等待時間,8核併發編譯,耗費了估計得有1-2個小時。
刀片機的CPU都跑滿了!!!
出去吃完飯後回來,就看到完成拉。具體的path路徑能夠選擇加不加均可以,加的話,直接/etc/profile export PATH=$PATH:llvm-path/bin便可
lldb安裝完成,咱們的工做就完成一大半拉。shell
/usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/createdump 9364
具體命令解釋
createdump [options] pid
-f, --name - dump path and file name. The pid can be placed in the name with %d. The default is "/tmp/coredump.%d"
-n, --normal - create minidump (default).
-h, --withheap - create minidump with heap.
-t, --triage - create triage minidump.
-u, --full - create full core dump.
-d, --diag - enable diagnostic messages.windows
#官方文檔上是這樣寫的。 /usr/local/llvm-3.9.0/bin/lldb -O "settings set target.exec-search-paths /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1" \ -o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so" \ --core /opt/dump\_file/mvcdumpmindump /usr/share/dotnet/dotnet #網友調試參考博客上是這樣寫的。 /usr/local/llvm-3.9.0/bin/lldb dotnet \ -c /opt/dump\_file/mvcdumpmindump \ -o "plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.1/libsosplugin.so"
2種寫法都是可行的。而後具體的調試分析指令什麼的都在coreclr調試說明指導文檔有說明。
centos
參考資料:
coreclr調試說明指導文檔
https://github.com/dotnet/coreclr/blob/master/Documentation/building/debugging-instructions.md
coreclr生成dmp說明指導文檔
https://github.com/dotnet/coreclr/blob/master/Documentation/botr/xplat-minidump-generation.md
llvm,clang,lldb源代碼下載地址(3.9.0)
http://releases.llvm.org/download.html#3.9.0
lldb源碼安裝指導文檔
http://lldb.llvm.org/build.html#BuildingLldbOnLinux
llvm源碼安裝指導文檔
http://releases.llvm.org/3.9.0/docs/GettingStarted.html
網友centos7安裝llvm,clang,lldb等給力腳本
https://github.com/owent-utils/bash-shell/blob/master/LLVM%26Clang%20Installer/3.9/installer.sh
網友調試參考博客文章
使用SOS調試工具檢查應用程序狀態bash