实验室 4.1 在将文件复制到另一台计算机后分析核心转储文件

适用于: .NET Core 2.1、.NET Core 3.1、.NET 5

本文讨论如何将核心转储文件从 Linux 计算机复制到另一台计算机。 例如,从 Linux 收集核心转储文件,然后将其复制到 Windows 虚拟机(VM)进行分析。

先决条件

遵循本部分的最低要求是在 Linux 环境中至少从本培训的前面部分捕获一个核心转储。 可以使用由 createdump 或 dotnet-dump 工具生成的任何核心转储文件。

本实验室的目标

到目前为止,在整个训练模块中,你已在 Linux 中收集了核心转储文件,并在同一 Linux VM 上的调试器中打开它们。 如果无法分析同一 VM 上的转储,会发生什么情况? 通常,将从生产环境中收集核心转储文件,目的是排查问题。 但不建议这样做。 此外,并不总是可以在同一生产计算机上运行调试会话。

为了解决此问题,本实验室系列将介绍以下选项,用于分析 Linux VM 上收集的核心转储文件:

  • 使用 dotnet-dump 分析在适用于 Linux 的 Windows 子系统(WSL)环境中运行的 Linux VM 上的核心转储文件。
  • 使用 dotnet-dump 分析在 Docker 容器中运行的 Linux VM 上的核心转储文件。

以下练习基于 Windows 10 的 VM,用于托管 Docker 容器和 WSL2 环境。

在本实验室的第一部分,你将使用 pscp 命令指导将核心转储文件从 Linux VM 复制到 Windows VM 的过程。 此实验室还将解决复制不建议的文件的方法。

将核心转储文件复制到本地 VM

在此训练中用于调试失败 ASP.NET 核心应用程序的练习中,你生成了三个手动内存转储文件。 现在,你将了解如何将这些核心转储文件复制到 Windows VM。

ll 命令的屏幕截图。

请记住,核心转储文件包含进程内存。 因此,如果进程内存使用率较高,核心转储的大小可能会很大。 可以优化传输,而不是逐个复制每个核心转储文件。 为此,请使用 tar 命令打包和压缩它们,以便你有一个压缩 coredumps.tar.gz 文件,其中包含所有三个核心转储文件。

如以下屏幕截图所示,可以使用 tar -czvf coredumps.tar.gz coredump.manual.* 命令创建压缩的存档文件。

tar 命令的屏幕截图。

在前面的示例中,存档文件 coredumps.tar.gz 位于 Linux VM 目录中的 home 转储文件文件夹中。 目标是将目标 Windows VM 上的 /home/UserName/coredumps.tar.gz d:\Learn\Linux\Dumps 文件夹复制到目标 Windows VM。

可通过多种方式从 Linux VM 复制文件。 你应该已经熟悉其中一个选项:在 pscp Windows VM 上使用命令。 如果已遵循整个系列,则应记住第 2.5 部分的此命令 - 将文件从开发环境复制到 Linux VM,然后提取 Linux 中的文件。

注意

对于尚未通过本系列第 2.5 部分工作的读者:它引入了 PuTTY 并讨论了基本用法选项。

Windows VM 上打开Windows 终端。 (如果愿意,可以改为打开命令提示符窗口。但是,强烈建议使用 Windows 终端。然后运行以下命令,将文件复制到 VM:

pscp -i D:\Learn\Linux\BuggyAmb-Ubuntu-Training_key.ppk <UserName>@buggyamb:/home/<UserName>/dumps/coredumps.tar.gz D:\Learn\Linux\Dumps\coredumps.tar.gz

注意

与 PuTTY 类似,pscp 对私钥使用 PPK 文件格式。 如果只有 PEM 文件且没有 PPK,则可以使用 PuTTY 密钥生成器工具(PuTTYgen)将 PEM 格式转换为 PPK 格式。 第 1.1 部分详细介绍 了这一点 - 在 Azure 中创建 Linux 虚拟机并连接到它

如以下屏幕截图所示,该命令已成功将coredumps.tar.gz文件复制到 D:\Learn\Linux\Dumps 文件夹中的本地 VM

ahnetnb 命令的屏幕截图。

从 Linux 复制文件的其他选项

可通过多种方法将文件从 Linux 复制到 Windows VM。 其中一个明显的选项是在 Linux 上安装 FTP 服务器,并使用 FTP 将文件传输到目标 Windows VM。 如果要选择此选项,请确保通过 SSH 解决方案设置 FTP 以确保安全性,并避免使用纯 FTP 协议,因为这将以明文形式发送用户名、密码和数据。

另一个选项是将核心转储文件复制到 ASP.NET Core 应用程序的 wwwroot 文件夹,然后使用 Web 浏览器下载它们。 这是一个非常糟糕的想法。 请不要尝试此内容! 核心转储文件包含进程的所有内存。 这意味着任何敏感信息都将包含在核心转储文件中。 将此类文件复制到 Web 服务器意味着,即使不共享 URL,也会向可访问 Web 服务器的任何人公开该文件中的敏感信息。 考虑到它涉及的信息泄露,因此将此视为最后手段的解决方案。

成功传输后,Windows VM 上应至少有一个核心转储文件。 现在可以转到下一部分,了解如何分析转储文件。

后续步骤

实验室 4.2 分析另一台计算机上的核心转储文件 - 使用 WSL 打开核心转储文件