linux 内核恐慌,内核恐慌日志在哪里?

问题描述

我有Handbrake /ffmpeg的问题。转码约5分钟后,电脑锁定。我很确定这是一个内核恐慌,因为caps-lock开始闪烁。

有一些关于该做什么和一些关于具体错误的逻辑问题,但我真的在追求一件事:在一切都死之前发生了什么?!

我已经检查了/var/log/kern.log,我所看到的只是我在DVD中粘贴,然后几分钟后,系统启动了。没有错误,没有恐慌通知。

有没有办法强制记录恐慌?我很确定我可以重现这个(这是我最近尝试过的100%)所以虽然我宁愿这个”just worked”,但我很高兴重启几次,如果这意味着我能找到原因恐慌

最佳解决思路

Ubuntu中的所有系统日志都由rsyslog处理,后者将其配置保存在/etc/rsyslog.conf和/etc/rsyslog.d/中。

有关如何配置rsyslog以及可能的选项的更多信息,请访问rsyslog.conf man page。

打开/etc/rsyslog.d/50-default.conf,您可以看到其中一行包含

*.*;auth,authpriv.none -/var/log/syslog*

这意味着在这种情况下您要查找的文件是您可能拥有的任何巨大的/var/log/syslog日志。

您可以看到文件名也以-开头,这意味着文件在写入之前被缓存,它很棒,但可能会给您留下不好的日志,您想要的是一旦出现问题就写入日志。删除短划线并重新启动或重新加载rsyslog,然后再次使计算机崩溃,请检查/var/log/syslog。

次佳解决思路

如果它确实是内核恐慌,那么它将不会通过常规方法写入日志。由于内核崩溃了,写入文件系统是一项危险的操作 – 内核不再可信任,因此写入日志实际上可能会在引导加载程序上随意乱扔垃圾!

相反,您可以将内存的内容转储到交换中,然后再进行调试。这称为内核崩溃/核心转储。

Ubuntu Wiki有一个可能有用的CrashdumpRecipe – 虽然它看起来有些过时,但我认为不应该有太多变化。

第三种解决思路

串行端口

串行端口是计算机之间的简单低级通信机制。

好处:

简单设置一次(如果你有硬件)

可靠,因为数据传输仅依赖于简单的线路和内核API,它比TCP /IP子系统更不容易受到恐慌的影响。

缺点:

大多数现代笔记本电脑不再具有串口(暴露?)以节省空间。但台式机和虚拟机仍然可以。

你还需要第二台带有串口的计算机来接收数据,但基本上所有的嵌入式开发板都是如此,例如Raspberry Pi。

受物理层串行电缆长度的限制,不同于无限制的TCP /IP网络。但是,这可以通过串行和TCP /IP之间接口的设备来解决。但是有些设备可以在两者之间进行转换。

串口如下所示:

dd6c4a37e82e849b45cdc7813368f507.png

通过GPIO可以获得RPI。

然后,如果您有所需的硬件,请使用以下命令从第二台计算机连接到主计算机:

screen /dev/ttyS0 115200

这实际上给你一个shell。

然后在主机上启动恐慌操作。

当恐慌发生时,恐慌转储将流式传输到第二台机器,您可以通过在终端上向上滚动来查看所有内容。

其他方法

还有其他方法克服了上述硬件限制,代价是更复杂和更不可靠。值得注意的方法:

netdump:通过TCP /IP传播恐慌。依赖于TCP /IP子系统未被破坏。

kdump:似乎是在下面提到的linux-crashdump的基本机制:https://askubuntu.com/a/104793/52975启动第二个Linux内核来检查崩溃的内核。什么可能出错?! 🙂

一步调试

最终,获得恐慌输出需要一些内核功能,并且任何内核功能都可能被恐慌所破坏。

但是,如果你可以在内核上使用GDB,谁还需要恐慌?如果你是那个硬核,请看看:

一旦你有完全的可见性(和足够的时间!),每个问题都会失败。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值