.net core dump分析

服务器上如果出现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项目举例 代码如下

    .net core dump分析_第1张图片

  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 查看是否加载成功,并查看命令介绍

    .net core dump分析_第2张图片

  6. 查找线程 !threads

    .net core dump分析_第3张图片

  7. 指定线程 ~{线程编号}s 例如22号线程:~22s 。 查找该线程的堆栈信息 !clrstack

    .net core dump分析_第4张图片

  8. 利用!dumpheap 查找所有gc中所有的对象占用内存的大小并且排序。 (可以利用!help dumpheap 查看相关介绍)

    .net core dump分析_第5张图片

  9. 利用  !dumpheap -min 85000 查看LOH对象来判断内存泄漏的对象 LOH 对象介绍: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap

    这里测试项目没有该对象

    .net core dump分析_第6张图片

  10. 利用!dumpheap -strings 来查看指定对象在应用中的使用 这里用string 举例

    .net core dump分析_第7张图片

  11. 利用!dumpheap -type Console 查看指定类型 在应用中的使用 这里用console举例

    .net core dump分析_第8张图片

  12. 利用!do {线程编号}来查看该改对象在这个线程中的使用

    .net core dump分析_第9张图片

     

     

    还有很多的命令,再补充

转载于:https://www.cnblogs.com/TeemoHQ/p/10388163.html

你可能感兴趣的:(.net core dump分析)