要快速判断问题方向,最直接的办法就是去看/var/crash/最新子目录里dmesg.*文件的最后50行。这里往往最容易暴露panic或Oops的线索,像“Kernel panic - not syncing”“Oops”“Call Trace:”这类关键词,基本一眼就能锁定重点。很多时候,90%的根因就藏在这几行里。

Linux怎么查看具体的系统崩溃堆栈

崩溃后怎么快速定位 panic 或 Oops 行?

先去看 /var/crash/ 下面最新那个子目录里的 dmesg.* 文件,这基本就是系统崩溃前内核留下的实时日志快照。先别急着上 crash 工具,很多时候真正有用的线索,十有八九就埋在最后几十行里,比如 Kernel panic - not syncingOopsCall Trace: 这些关键信息。

执行:
cat /var/crash/$(ls -t /var/crash | head -n1)/dmesg.* | tail -n 50

crash 工具里怎么看进程级堆栈?

crash 不是万能日志阅读器,它是用来解析 vmcore 内存镜像的交互式调试器。必须满足两个硬条件:有对应内核版本的 vmlinux 符号文件 + 正确加载了 dump.XXXX 文件。

进入崩溃目录后,运行:
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux dump.XXXX

没 kdump 怎么临时抓内核堆栈?

系统还在跑、但已出现异常(比如软锁死、高延迟),又没配 kdump,可以用 SysRq 触发即时堆栈打印。前提是 /proc/sys/kernel/sysrq 值为 1(默认多数发行版开启)。

物理机或带控制台的虚拟机上操作:
按住 Alt + SysRq(即 Print Screen 键),松开后立刻按 t(小写)

用户态程序崩溃的堆栈在哪找?

内核崩溃和用户程序崩溃是两套机制。用户态程序(如 nginx、python 脚本)崩溃,靠的是 core dump,不是 vmcore

确认 core 生成已开启:
ulimit -c 必须非 0(推荐 ulimit -c unlimited);
sysctl kernel.core_pattern 看路径,常见值如 core.%e.%p/var/lib/core/core.%e.%p

真正麻烦的不是怎么查,而是堆栈里混着内核态和用户态上下文——比如系统调用陷入内核后 panic,这时候得先用 crash 看内核栈,再用 gdb 对应 core 看用户态现场,两者地址空间完全独立,不能交叉解析。

本文转载于:https://www.php.cn/faq/2962275.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。