linux 内核挂了,怎么调试? 分析在那个进程导致挂掉?
时间: 2023-12-14 19:40:13 浏览: 305
当 Linux 内核发生崩溃时,可以使用内核崩溃转储(kernel core dump)进行调试。内核崩溃转储是 Linux 内核当前状态的一份快照,可以在崩溃时捕获并保存到磁盘中。在转储文件中,可以查看内核崩溃时的寄存器,堆栈跟踪信息,以及其他有用的信息。
要启用内核崩溃转储功能,需要在内核配置中打开 CONFIG_CRASH_DUMP 选项,并在启动参数中添加 crashkernel= 参数来指定转储区域的大小。例如:
```
crashkernel=128M@16M
```
表示在物理内存地址从 16MB 开始的 128MB 区域内分配空间用于内核崩溃转储。
当内核崩溃时,转储文件会被保存到指定的转储区域中。可以使用 kdump 工具来分析转储文件,例如:
```
# service kdump start
# echo c > /proc/sysrq-trigger
```
这将导致内核崩溃并生成转储文件,然后启动 kdump 服务并自动分析转储文件。分析器将显示崩溃时的堆栈跟踪,从而帮助确定导致崩溃的进程或模块。
如果需要手动分析转储文件,可以使用 crash 工具。例如:
```
# crash /path/to/vmcore /usr/lib/debug/lib/modules/`uname -r`/vmlinux
```
这将启动 crash 工具并加载指定的转储文件和内核符号文件,从而可以进行堆栈跟踪和其他调试操作。
阅读全文