【问题标题】:UNKNOWN classes in dumpheap sos plugin in linuxlinux中dumpheap sos插件中的未知类
【发布时间】:2020-05-21 08:32:02
【问题描述】:

我尝试在我的 .net 核心服务器上检测内存泄漏并通过 gcore 进行内存转储。尝试在 debian 9 上通过 lldb 和 sos 进行分析。

ulimit -c unlimited
sudo gcore -o dump $(pidof dotnet)
sudo lldb-4.0 $(which dotnet) --core ./dump.MY_PID
(lldb) plugin load /usr/share/dotnet/shared/Microsoft.NETCore.App/2.2.1/libsosplugin.so
sos DumpHeap -stat

所以,我有一张大桌子,上面有 mt、count、size 和 objname

但我所有的课程都是未知的

...
00007f754af190b8      650        26000 UNKNOWN
00007f754b339df0      512        32768 UNKNOWN
00007f7549e8d718        6        35692 System.UInt16[]
00007f754c4e9e10      679        38024 UNKNOWN
00007f7549eb3138      482        61696 System.IO.FileStream
00007f754a155468      203        74208 System.Collections.Generic.Dictionary`2+Entry[[System.String, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
00007f754af198f8      695        90088 UNKNOWN
00007f7549e910d0      173        90696 System.Object[]
00007f7549e8a790     1010        98996 System.Int32[]
00007f7549e94ef0      361       417304 System.Char[]
00007f7549e950f0     1826       677178 System.Byte[]
00007f7549ea8a20    12844      1046724 System.String
00000000009628b0      809      2671130      Free

我认为,我应该设置符号。但是...我将它复制到 CLR 文件夹 /usr/share/dotnet/shared/Microsoft.NETCore.App/2.2.1/ 并尝试使用 add-dsym 命令。没有什么变化... 我怎样才能有全栈的正常转储?

【问题讨论】:

    标签: .net linux memory-leaks lldb sos


    【解决方案1】:

    来自微软的documentation

    gdb 或 gcore 等其他工具也可用于创建核心转储 但可能会错过托管调试所需的状态,从而导致 分析期间的“未知”类型或函数名称。

    createdump 是在 Linux 上创建包含本机和托管信息的核心转储的推荐工具。

    Here 是有关下载核心转储的主机程序、模块和符号的文档。

    另外:

    一旦 LLDB 启动,可能需要使用 setsymbolserver 命令指向正确的符号位置(setsymbolserver -ms 使用 Microsoft 的符号服务器或 setsymbolserver -目录 指定本地路径)。可以通过运行加载本机符号 加载符号。此时,可以使用 SOS 命令来分析 转储。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多