.net core dump分析

20211220 更新:利用VS或者命令内存分析https://www.cnblogs.com/TeemoHQ/p/15710523.html

20210421更新:可以使用https://memprofiler.com/download和VS直接打开dmp文件 (内存泄漏查看比较方便,但是cpu线程分析还是用dotnet-dump analyze好一点)

20201211更新: 用 https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump  更方便 后续新出的分析工具 命令差不多(sos.dll: https://docs.microsoft.com/en-us/dotnet/framework/tools/sos-dll-sos-debugging-extension)

服务器上如果出现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 {线程编号}来查看该改对象在这个线程中的使用

     

     

    还有很多的命令,再补充

posted @ 2019-02-16 16:23  TeemoHQ  阅读(5669)  评论(3编辑  收藏  举报