重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]
前言
简单介绍一下在排查问题。献给初学者。
该文的前置篇:
https://www.cnblogs.com/aoximin/p/16838657.html
正文
什么是linux系统
linux 是基于名为procfs的特殊文件系统。
linux 有一句著名的话,一切皆文件。
通常,数据会在启动时映射到名为 /proc 的装入点。 proc 文件系统充当内核中内部数据结构的接口。 可以使用该文件获取有关系统的信息,并在运行时更改某些内核参数 (sysctl) 。
进程被视为 /proc/ 目录下的文件。 此目录在此处定义为特殊目录:
“此特殊目录保存有关 Linux 系统的所有详细信息,包括其内核、进程和配置参数。
举个例子,比如你要查看内存,你可以使用free。
然后你还可以使用:
cat /proc/meminfo
比如查看cpu信息:
可以看到我的cpu 是i5 7500,好多年的电脑了,当年也是很好的。
如果要查看进程信息,这里随便找一个进程。
然后进40422这个目录看一下:
这里面就是这个进程运行数据:
比如cmdline:
有比如说查看这个进程的环境变量:
最基础的排查方式
查看内存和cpu。
windows 上有任务管理器,那么linux 也有,就是top。
如果发现这些信息不能满足你,可以按f,去选择自己想要的信息。
通过空格,选择自己需要看的信息。
然后使用man top 查看用法。
top -p xxx 查看某一个进程,然后有个比较好用的是 top -Hp xxx
这个是查看线程模式:
可以观察到线程的运行情况。
如果运行太多,可以使用U来查看某个用户的进程。
top -u root
如果查看正在使用cpu的进程可以使用-i,比如 top -i -u root 这样查看。
再介绍一个htop,这个是装13模式。
这逼格是不是加大了,命令和top一样,不过颜色标明出来了。
注意这一行:
快捷方式做一些常规操作。
核心转储
什么是核心转储,核心转储就是进程内存的快照。
下面是 Linux 系统的行为与核心转储文件生成相关的一些关键方面:
默认情况下,当进程意外终止时,将生成核心转储文件。
核心转储文件名为“core”,在当前工作目录或目录中 /var/lib/systemd/coredump 创建。
尽管默认行为是操作系统生成核心转储文件,但可以覆盖 /proc/sys/kernel/core_pattern 此设置,将核心转储文件输出直接传送到另一个应用程序。
那么生成了核心转储服务,有没有管理的,那肯定是有的,比如apport
捕获核心转储和调试器:
有多种工具可用于捕获核心转储文件,例如 gcore、gdb 和用于分析核心转储文件的多个工具,例如 objdump、 kdump、 gdb 和 lldb。
但是,在使用这些工具尝试执行 .NET 调试时,你会遇到一些重大困难:
与在 Windows 上为 WinDbg 调试器设置符号的过程相比,配置可能很困难。
核心转储文件很大,因为这些工具不知道在 .NET Core 进程中使用了哪个内存区域,并且无法将内存信息剪裁为仅需要什么。
转储文件不可移植。 必须分析生成这些文件的 Linux 计算机上的转储文件。 如果要分析不同 Linux 计算机上的转储文件,则需要执行额外的步骤来为调试会话配置主机。
微软官方推荐:
Lldb 是用于分析 .NET Core 转储的建议工具。 .NET SDK 包括用于正确配置 lldb 的有用工具。 但是,必须安装至少版本 3.9 才能对 .NET Core 执行此类调试分析。
若要安装 lldb 3.9 或更高版本,请使用包管理器 (,例如: sudo apt install lldb) 。
但是微软有自己的,比如:
createdump
dotnet-dump
dotnet-gcdump
dotnet-symbol
Procdump
这几个是需要掌握的,因为内容比较多,所以下一节吧。
结
下一节介绍:
Lldb
createdump
dotnet-dump
dotnet-gcdump
dotnet-symbol
Procdump