专栏首页运维之美你真的会调试 Linux 内核故障吗,看完这一篇后你会茅塞顿开的!

你真的会调试 Linux 内核故障吗,看完这一篇后你会茅塞顿开的!

Linux 内核是操作系统的核心,它控制对系统资源(例如:CPUI/O设备、物理内存和文件系统)的访问。在引导过程中以及系统运行时,内核会将各种消息写入内核环形缓冲区。这些消息包括有关系统操作的各种信息。

内核环形缓冲区是物理内存的一部分,用于保存内核的日志消息。它具有固定的大小,这意味着一旦缓冲区已满,较旧的日志记录将被覆盖。

dmesg 命令行实用程序用于在 Linux 和其他类似 Unix 的操作系统中打印和控制内核环形缓冲区。对于检查内核启动消息和调试与硬件相关的问题很有用。

在本教程中,我们将介绍 dmesg 命令的基础。

使用 dmesg 命令

dmesg 命令的语法如下:

dmesg [OPTIONS]

在不带任何选项的情况下调用时,dmesg 将所有消息从内核环形缓冲区写入标准输出:

$ dmesg

默认情况下,所有用户都可以运行 dmesg 命令。但是,在某些系统上,非 root 用户可能会限制对 dmesg的访问。在这种情况下,调用 dmesg`时您将收到如下错误消息:

dmesg: read kernel buffer failed: Operation not permitted

内核参数 kernel.dmesg_restrict 指定非特权用户是否可以使用 dmesg 查看来自内核日志缓冲区的消息。要删除限制,请将其设置为零:

$ sudo sysctl -w kernel.dmesg_restrict=0

通常,输出包含很多信息行,因此只能看到输出的最后一部分。要一次查看一页,请将输出通过管道传送到分页实用程序,例如 lessmore

$ dmesg --color=always | less

其中的 --color=always 参数用于保留彩色输出。

如果要过滤缓冲区消息,可能使用 grep 。例如,要仅查看与 USB 相关的消息,请键入:

$ dmesg | grep -i usb

dmesg 从 /proc/kmsg 虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。如果系统上正在运行 syslog 进程,并且你尝试使用 catless 命令读取文件,则命令将挂起。

syslog 守护程序将内核消息转储到 /var/log/dmesg,因此你也可以使用该日志文件:

$ cat /var/log/dmesg

格式化 dmesg 输出

dmesg 命令提供了许多选项,可帮助你格式化和过滤输出。

dmesg 中最常用的选项之一是 -H(--human),它将输出更容易读的结果。

$ dmesg -H

要打印人类可读的时间戳,请使用 -T(--ctime 选项:

$ dmesg -T

[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready

时间戳格式也可以使用 --time-format <format> 选项设置,可以是 ctimereltimedeltanotimeiso。例如:要使用增量格式,你可以输入:

$ dmesg --time-format=delta

你也可以组合两个或多个选项:

$ dmesg -H -T

要实时观看 dmesg 命令的输出,请使用 -w(--follow)选项:

$ dmesg --follow

过滤 dmesg 输出

你可以将 dmesg 输出限制为给定的设施和等级。dmesg 支持以下类型:

  • kern-内核消息
  • user-用户级消息
  • mail-邮件系统
  • daemon-系统守护程序
  • auth-安全/授权消息
  • syslog-内部 syslogd 消息
  • lpr-行式打印机子系统
  • news-网络新闻子系统

-f(--facility <list>) 选项允许你将输出限制为特定的设备,该选项接受一个或多个逗号分隔的功能。

例如,要仅显示内核和系统守护程序消息,可以使用:

$ dmesg -f kern,daemon

每条日志消息都与一个显示消息重要性的日志级别相关联,dmesg 支持以下日志级别:

  • emerg-系统无法使用
  • alert-必须立即采取措施
  • crit-紧急情况
  • err-错误条件
  • warn-警告条件
  • notice-正常但重要的条件
  • info-信息性
  • debug-调试级消息

-l(--level <list>)选项允许你将输出限制为定义的级别,该选项接受一个或多个逗号分隔的级别。以下命令仅显示错误和严重消息:

$ dmesg -l err,crit

清除环形缓冲区

-C(--clear) 选项可让您清除环形缓冲区:

$ sudo dmesg -C

只有 root 或具有 sudo 特权的用户才能清除缓冲区。

要在清除之前打印缓冲区内容,请使用 -c(--read-clear)选项:

$ sudo dmesg -c

如果要在清除文件之前将当前 dmesg 日志保存到文件中,你可以将输出重定向到文件:

$ dmesg > dmesg_messages

结论

dmesg 命令允许你查看和控制内核环形缓冲区。对内核或硬件问题进行故障排除时,它非常有用。

在终端中输入 man dmesg,你可以获取有关所有可用 dmesg 选项的信息。

本文翻译自:「Linuxize」,原文:https://url.cn/5PN5NmU,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com

本文分享自微信公众号 - 运维之美(Hi-Linux),作者:Mike

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢

    我就知道有人会这么说,然而那样就成了一篇议论文了,而我只是想写一篇随笔。所以,不管事实是不是那样,反正我就是觉得Windows,MacOS,iOS都很流畅,而L...

    Linux阅码场
  • 人工智能的缘起:达特茅斯会议

    尼克,乌镇智库理事长,数知科技创始人,国家“千人计划”专家。早年负笈美国,师从“强化学习”算法发明者;曾在哈佛和惠普工作。 近日,尼克的《人工智能简史》由人民邮...

    企鹅号小编
  • 为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢

    链接:https://blog.csdn.net/dog250/article/details/96362789

    Python进击者
  • 为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢

    我就知道有人会这么说,然而那样就成了一篇议论文了,而我只是想写一篇随笔。所以,不管事实是不是那样,反正我就是觉得Windows,MacOS,iOS都很流畅,而L...

    用户6543014
  • 如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。

    这次的文章还是绕回了我写的第三篇原创文章《有的线程它死了,于是它变成一道面试题》中留下的几个问题:

    cxuan
  • 你以为在做的是微服务?不!你只是做了个比单体还糟糕的分布式单体!

    这样的改造现象,其实在国内还是蛮多见的。今天我们就来聊聊这个有趣的话题:分布式单体。各位看官,看看你们公司是不是也犯了这样的错误?

    程序猿DD
  • 【程序源代码】非常棒的java学习面试指南

    最近好多同学想学习java,我在网上找了找终于找到这个指南。这一个非常不错的java学习指南。内容包含的比较全面,知识点也比较完整。

    程序源代码
  • 人工智能简史

    《人工智能简史》全面讲述人工智能的发展史,几乎覆盖人工智能学科的所有领域,包括人工智能的起源、自动定理证明、专家系统、神经网络、自然语言处理、遗传算法、深度学习...

    iOSDevLog
  • 陈莉君: 中国台湾開源人年会之Linux内核之旅(附演讲PPT及讲解)

    今年是第一次参加COSCUP 开源人年会,到底与大家分享些什么,与社区大牛BOB沟通后,他建议我就分享自己这20年来的Linux内核之旅。

    Linux阅码场
  • 从SAP最佳业务实践看企业管理(43)-SD-市场和质量

    商品销售出去,也不是完事大吉了,客户收到货后,要进行质检,如果质检不合格,就申请索赔或退货。 市场和质量 羊毛出在羊身上,你所得到的好处已经包含在你付出的代价里...

    SAP最佳业务实践
  • Linux之《荒岛余生》(三)内存篇

    内存问题,脑瓜疼脑瓜疼。脑瓜疼的意思,就是脑袋运算空间太小,撑的疼。本篇是《荒岛余生》系列第三篇,让人脑瓜疼的内存篇。其余参见:

    xjjdog
  • 安装KubeSphere

    官方中文文档:https://kubesphere.io/docs/zh-CN/introduction/what-is-kubesphere/

    py3study
  • 为什么我要写自己的框架?

    其实说白了框架就是使用别人造好的轮子。在软件开发里面就是command+C/command+V。

    哲洛不闹
  • 什么是 “分布式事务” ?

    对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。

    小灰
  • Linux Deploy:在Android上部署Linux

    美丽应用
  • 谁发明了AI?

    爱迪生发明了电灯,贝尔发明了电话,马爸爸发明了“自动剁手机”,那么是谁发明了人工智能呢?DT君写了一篇文章帮你找答案。

    DT数据侠
  • 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在...

    小小科
  • Science最新研究:AI通过追踪光标移动,线上勘破骗局

    大数据文摘
  • 重大事故!IO问题引发线上20台机器同时崩溃

    几年前的一个下午,公司里码农们正在安静地敲着代码,突然很多人的手机同时“哔哔”地响了起来。本来以为发工资了,都挺高兴!打开一看,原来是告警短信

    cxuan

扫码关注云+社区

领取腾讯云代金券