第 3.1 部分 - 准备好进行故障排除

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

本文帮助你将故障排除过程视为一个整体。

先决条件

与前面的部分一样,本部分的结构更加强调开始故障排除时要遵循的理论和主体。 它没有任何先决条件。 但是,如果已按照此培训的所有步骤操作,则应已设置以下各项:

  • Nginx 有两个网站:
    • 第一个网站使用 myfirstwebsite 主机标头(http://myfirstwebsite)侦听请求,并将请求路由到正在侦听端口 5000 的演示 ASP.NET Core 应用程序。
    • 第二个网站使用 buggyambhttp://buggyamb) 主机标头侦听请求,并将请求路由到正在侦听端口 5001 的第二个 ASP.NET Core 示例 buggy 应用程序。
  • ASP.NET Core 应用程序都作为服务运行,这些服务在重新启动服务器时自动重启,或者应用程序停止响应或失败。
  • Linux 本地防火墙已启用并配置为允许 SSH 和 HTTP 流量。

本部分的目标

当你准备排查在前面所述的配置时可能会遇到的问题时,此部分提供了有关在 Linux 上运行进程的信息的指导。

Linux 中的所有内容是否都是文件?

你可能会听到短语“Linux 中的所有内容都是文件”。这个短语真的是这样吗? 尽管本文系列不侧重于 Linux 专业知识,但 Linux 操作系统非常倾向于通过文件系统公开所有内容。 此部分将尝试深入探讨为何如此。

根据 维基百科,Linux 基于名为 procfs 的特殊文件系统。

proc 文件系统(procfs)是类似 Unix 的操作系统中的一种特殊文件系统,它提供分层文件结构中有关进程和其他系统信息的信息。 这比传统的 跟踪 方法更方便、更标准化,或者直接访问 内核 内存,以便动态访问内核中保存的进程数据。 通常,数据在启动时映射到名为 /proc 的装入点。 proc 文件系统充当内核中内部数据结构的接口。 可以使用该文件获取有关系统的信息,并在运行时更改某些内核参数(sysctl)。

因此,如果你是基于 Linux 的计算机上的超级用户,则可以通过文件系统文件访问有关每个正在运行的进程的信息。 如果 Linux 中的所有内容都是文件,则进程也是如此。

你可能会记得,我们在本系列前面的部分简要讨论了这一点:进程被视为 /proc/ 目录下的一个文件。 此目录在此处定义为特殊目录

“此特殊目录包含有关 Linux 系统的所有详细信息,包括其内核、进程和配置参数。

如果使用命令检查此目录ll /proc/,你将看到多个“文件”和“文件夹”。例如,你将看到一个名为“file”。/proc/meminfo 如果运行 cat /proc/meminfo 该命令,将生成有关服务器内存使用情况统计信息的以下详细信息:

cat meminfo 命令的屏幕截图。

同样,如果运行 cat /proc/cpuinfo 命令,ou 将看到以下服务器处理器信息:

cat cpuinfo 命令的屏幕截图。

如果要获取 Linux OS 版本信息,可以使用 cat /proc/version 命令:

cat 版本命令的屏幕截图。

依此类推。

进程是否确实是文件?

对于进程,Linux 系统上的每个正在运行的进程将显示为文件夹下的 /proc/ 子目录,每个文件夹都命名为进程 ID:

ll proc 命令的屏幕截图。

如果检查其中一个进程 ID 目录,你将看到一些其他文件和文件夹。 必须使用“sudo”为命令添加前缀才能获取以下信息:

sudo 命令的屏幕截图。

cmdline检查其中一个进程。 运行 sudo cat /proc/19933/cmdline 命令。 (你将选择的过程的 PID 将有所不同)。 输出将如下所示。 (这是第 2 部分中安装和配置的 BuggyAmb 应用程序)。

sudo cat 命令的屏幕截图。

最后,让我们通过运行 sudo cat /proc/19933/environ 命令来查看 BuggyAmb 进程的环境变量。 在上一部分中,你被指示使用 ASPNETCORE_URLS 环境变量。 这是为了指示 Web 应用程序侦听端口 5001 而创建的:

sudo cat environ 命令的屏幕截图。

使用此文件系统技术,可以获取有关进程的大量信息。

ps 命令

本文不会详细介绍此命令。 但是,在讨论进程时,应该在此处提及该命令,因为它是生成当前进程的快照的最简单方法之一。 建议使用 man ps 命令打开“man”页,并自行尝试。

后续步骤

第 3.2 部分 - Linux 任务管理器、顶部和 htop

下一部分将检查可用于排查问题的一些重要工具和命令。