.net core dump分析

服务器上若是出现cpu内存饱满,找不到缘由,那么dump文件分析必不可少。html

起初是想在linux下调试.net core 的dump,可是环境一直没法安装 搞了许久没搞出来,其次文章太少了,google几页都变紫色了,园友大佬知道能够给小弟解惑下几个问题。linux

  1. Linux分析高版本的.net core必须是要lldb3.9.0 这个就很烦了。个人linux的centos7.4。没有现成的能够下载,只能本身编译。编译数小时最终发现并无安装成功,大佬们有没有脚本能直接安装lldb3.9.0。开始都是按照http://www.javashuo.com/article/p-cnrvzanz-db.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分析git

  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版本。github

    插件介绍:https://docs.microsoft.com/en-us/dotnet/framework/tools/sos-dll-sos-debugging-extensioncentos

  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 {线程编号}来查看该改对象在这个线程中的使用

     

     

    还有不少的命令,再补充asp.net

相关文章
相关标签/搜索