網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
安裝
- 因?yàn)槲覀儸F(xiàn)在都是容器化時(shí)代了,所以我們可以把這類(lèi)工具全部制作成基礎(chǔ)鏡像
- 準(zhǔn)備Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS sdk RUN dotnet tool install --tool-path /tools dotnet-trace RUN dotnet tool install --tool-path /tools dotnet-counters RUN dotnet tool install --tool-path /tools dotnet-dump RUN dotnet tool install --tool-path /tools dotnet-gcdump FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime WORKDIR /tools COPY --from=sdk /tools . basedockerfile.yaml
驗(yàn)證
基礎(chǔ)鏡像做好了,查看下鏡像的大小應(yīng)該就比runtime的大小多幾十兆,相比為了使用dotnet-* tool而直接采用sdk的話(huà),體積小了很多很多
用我們剛才制作的基礎(chǔ)鏡像隨便起個(gè)demo程序驗(yàn)證下
- 已經(jīng)包含了tools文件夾了,里面存放了我們的tools工具
- 以dotnet-trace為例,測(cè)試下是否可用(ps:注意使用方式)
至此包含tools的runtime基礎(chǔ)鏡像制作完畢。
dotnet-dump
它只能收集托管內(nèi)存,不能用于條是本地代碼的問(wèn)題,而且分析它所創(chuàng)建的dump文件,必須和當(dāng)前環(huán)境保持一致
createdump
它既可以收集本地信息又可以收集托管信息,是一種比較全面而且推薦的方法
雖然gdb、gcore也能起到同樣的作用,但是他們可能會(huì)在收集的時(shí)候錯(cuò)過(guò)一些托管狀態(tài),導(dǎo)致最后你分析dump文件的時(shí)候有”UNKNOWN“的錯(cuò)誤
這個(gè)工具是伴隨著.net core runtime安裝的,目錄一般在”/usr/share/dotnet/shared/Microsoft.NETCore.App/[version]“下
開(kāi)始使用:
- /usr/share/dotnet/shared/Microsoft.NETCore.App/3.1.10/createdump -u 1 (1是我容器中程序的進(jìn)程id)
- 他會(huì)將coredump文件生成到容器的tmp目錄下,至此沒(méi)報(bào)錯(cuò)的話(huà),說(shuō)明成功
- 如果報(bào)權(quán)限相關(guān)錯(cuò)誤,可以在你的yaml文件里加上:
分析coredump文件
先將上面生成在tmp下的coredump文件copy到可以調(diào)試的地方
kubectl cp? bookstore/demo-7b6d9f6d4f-2t8hl:/tmp/coredump.1 /root/mydump/coredump.1 -c app-k8s
然后為我們的coredump.1文件下載關(guān)聯(lián)的symbol:
如果你準(zhǔn)備分析dump的機(jī)器沒(méi)有dotnet sdk的話(huà),先裝一個(gè)把
- sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
- sudo yum install dotnet-sdk-3.1
如果dotnet-symbol沒(méi)有安裝的話(huà),安裝一個(gè)
- dotnet tool install --global dotnet-symbol
- 然后關(guān)閉當(dāng)前終端,再打開(kāi)一個(gè)新的
然后執(zhí)行dotnet-symbol --host-only --debugging coredump.1
- 看到dac,dbi文件寫(xiě)入就代表成功了,這時(shí)候你的文件夾應(yīng)該長(zhǎng)這樣
然后我們使用lldb進(jìn)行調(diào)試
- 如果你機(jī)器里沒(méi)裝的話(huà),先裝一個(gè)吧
- 安裝sos插件:
- dotnet tool install --global dotnet-sos
- dotnet-sos install
- lldb-8 --core coredump.1
- 然后就可以用lldb來(lái)分析dump文件了
相關(guān)資料:
- https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-symbol
- https://github.com/dotnet/diagnostics/blob/master/documentation/debugging-coredump.md
- https://devblogs.microsoft.com/devops/understanding-symbol-files-and-visual-studios-symbol-settings/
- https://github.com/dotnet/diagnostics/blob/master/documentation/FAQ.md
- https://github.com/dotnet/runtime/issues/11012
- 關(guān)于大對(duì)象使用的注意點(diǎn)以及官方blob gc的實(shí)現(xiàn)描述
原文鏈接:https://www.cnblogs.com/eastpig/p/14006005.html
相關(guān)推薦
- 2022-05-06 C語(yǔ)言中回調(diào)函數(shù)的使用詳情_(kāi)C 語(yǔ)言
- 2022-05-27 Python腳本傳參數(shù)argparse模塊的使用_python
- 2022-03-23 C++虛函數(shù)注意事項(xiàng)_C 語(yǔ)言
- 2022-09-02 pytest使用@pytest.mark.parametrize()實(shí)現(xiàn)參數(shù)化的示例代碼_pytho
- 2023-06-04 C#中+=是什么意思及+=的用法_C#教程
- 2022-03-25 C語(yǔ)言設(shè)計(jì)模式之命令模式介紹_C 語(yǔ)言
- 2022-07-02 python?np.arange?步長(zhǎng)0.1的問(wèn)題需要特別注意_python
- 2022-05-25 Starship定制shell提示符實(shí)現(xiàn)信息自由_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支