4

重新整理 .net core 实践篇 ———— linux上排查问题 [外篇] - 敖毛毛

 1 year ago
source link: https://www.cnblogs.com/aoximin/p/16839812.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]

简单介绍一下在排查问题。献给初学者。

该文的前置篇:

https://www.cnblogs.com/aoximin/p/16838657.html

什么是linux系统

linux 是基于名为procfs的特殊文件系统。

linux 有一句著名的话,一切皆文件。

通常,数据会在启动时映射到名为 /proc 的装入点。 proc 文件系统充当内核中内部数据结构的接口。 可以使用该文件获取有关系统的信息,并在运行时更改某些内核参数 (sysctl) 。

进程被视为 /proc/ 目录下的文件。 此目录在此处定义为特殊目录:

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

举个例子,比如你要查看内存,你可以使用free。

然后你还可以使用:

cat /proc/meminfo

1289794-20221029194220006-905344271.png

比如查看cpu信息:

1289794-20221029194257821-1561076247.png

可以看到我的cpu 是i5 7500,好多年的电脑了,当年也是很好的。

如果要查看进程信息,这里随便找一个进程。

1289794-20221029194858540-1153190768.png

然后进40422这个目录看一下:

1289794-20221029195103652-231282212.png

这里面就是这个进程运行数据:

比如cmdline:

1289794-20221029195252587-767088956.png

有比如说查看这个进程的环境变量:

1289794-20221029195337948-643833843.png

最基础的排查方式

查看内存和cpu。

windows 上有任务管理器,那么linux 也有,就是top。

1289794-20221029200008876-629058465.png

如果发现这些信息不能满足你,可以按f,去选择自己想要的信息。

1289794-20221029200100154-1468713602.png

通过空格,选择自己需要看的信息。

然后使用man top 查看用法。

top -p xxx 查看某一个进程,然后有个比较好用的是 top -Hp xxx

这个是查看线程模式:

1289794-20221029200916868-344572600.png

可以观察到线程的运行情况。

如果运行太多,可以使用U来查看某个用户的进程。

top -u root

如果查看正在使用cpu的进程可以使用-i,比如 top -i -u root 这样查看。

再介绍一个htop,这个是装13模式。

1289794-20221029201644791-612791740.png

这逼格是不是加大了,命令和top一样,不过颜色标明出来了。

注意这一行:

1289794-20221029201806873-1852708018.png

快捷方式做一些常规操作。

什么是核心转储,核心转储就是进程内存的快照。

下面是 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK