dmesg 总结 -c

https://blog.youkuaiyun.com/abcd1f2/article/details/73293533

1.dmesg介绍

在dmesg里我们可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。

 

2.dmesg输出含义

dmesg 输出的数字含义是什么,纠结了一会儿,下面给出解释

终端输入dmesg,可以看到每行最开始显示的是一个综括号,里面的数字为timestamp,时间戳,该时间指示的系统从开机到现在的运行时间,单位为s 秒。

 

图1

 

3.dmesg -c

  在显示的同时,clean掉dmesg缓存中信息

4.dmesg -T

  以当前时间的方式显示时间信息,而不是图1所示的开机时间

 

图2

 

3 dmesg -d 

显示dmesg中两条打印信息的时间间隔

 

图3

 

我们可以计算,上一行的时间戳 + 下一行的间隔 = 下一行的时间戳

例如:第一行和第二行,1069.638561 + 0.000003 = 1069.638564  这里的时间单位为秒

 

4.dmesg -d -T

-d和-T参数混合使用,效果可想而知

 

图4

 

5.dmesg | tail 显示dmesg最近一次的输出

 

由上面我们可以看到dmesg可以让我们获得很多信息,包括函数进入时间等,可以利用dmesg原本已有的功能进行辅助分析。dmesg 很~\(≧▽≦)/~赞


<think>好的,用户的问题是关于如何调整Linux系统中dmesg内核环形缓冲区的大小。我需要根据提供的引用信息来构建一个准确的回答。首先,回顾一下引用内容: 引用[1]和[2]介绍了dmesg命令的基本用途,它用于查看内核环形缓冲区的内容,这个缓冲区存储了启动信息和内核消息。引用[3]提到dmesg直接从内核环形缓冲区读取,而该缓冲区的大小可能有限,且日志可能被覆盖。引用[4]讨论了环形缓冲区的实现,涉及到读/写指针和缓冲区大小的控制,这提示调整缓冲区大小可能需要修改内核参数或使用特定的命令。 用户的需求是增加这个环形缓冲区的大小。根据我的知识,调整环形缓冲区的大小通常涉及修改内核的启动参数,比如通过sysctl或者修改grub配置文件。然而,我需要确认这些方法是否在提供的引用中有支持或相关的线索。 在引用[3]中的C代码示例里,使用了klogctl系统调用来访问内核日志,这可能意味着缓冲区的大小在内核编译时就已经确定,或者可以通过运行时参数调整。不过用户希望的是配置方法,所以可能需要修改内核参数。 引用[4]提到环形缓冲区的实现有读/写指针和缓冲区大小控制,可能通过模块参数或内核启动参数来调整。因此,可能的步骤包括: 1. 修改内核启动参数,如log_buf_len,通过GRUB配置。 2. 使用sysctl动态调整,但需要确认是否支持。 3. 检查当前缓冲区大小的方法,比如dmesg -s或查看/proc/cmdline。 需要验证这些方法是否正确。例如,在grub配置中添加log_buf_len=4M来设置缓冲区大小为4MB。然后更新grub并重启系统。此外,可能还可以通过内核参数ignore_loglevel来保留所有级别的日志,避免被覆盖。 另外,引用[3]中的代码示例里,BUFFER_SIZE被定义为8192,这可能影响读取的缓冲区大小,但用户的问题是调整内核中的环形缓冲区本身,而不是读取时的缓冲区,所以修改内核参数更为关键。 需要确保回答中包括具体的步骤,如编辑grub文件、更新grub、重启,并验证更改是否生效。还要提醒用户注意,动态调整可能有限,可能需要重新编译内核,或者某些系统可能不支持动态调整。此外,临时调整可以使用dmesg -n来设置日志级别,但这可能不会改变缓冲区大小,而是过滤日志级别。 总结步骤: - 修改GRUB_CMDLINE_LINUX,添加log_buf_len=值 - 更新grub - 重启系统 - 验证/proc/cmdline中的参数 - 检查dmesg的输出是否显示更大的缓冲区 同时,需要指出永久性和临时性方法,以及可能的限制,比如某些系统可能需要内核支持或特定的版本。</think>### 如何调整Linux dmesg内核环形缓冲区大小 #### 1. **内核启动参数调整(永久生效)** Linux内核环形缓冲区大小在系统启动时通过内核参数`log_buf_len`设定[^4]。具体步骤如下: **步骤1**:编辑GRUB配置文件 ```bash sudo vim /etc/default/grub ``` 在`GRUB_CMDLINE_LINUX`行中添加`log_buf_len=4M`(示例为4MB,可自定义): ```bash GRUB_CMDLINE_LINUX="... log_buf_len=4M" ``` **步骤2**:更新GRUB配置 ```bash sudo update-grub ``` **步骤3**:重启系统 ```bash sudo reboot ``` **验证**: 检查内核启动参数是否生效: ```bash cat /proc/cmdline | grep log_buf_len ``` 或通过`dmesg`观察日志末尾的缓冲区初始化信息: ```bash dmesg | grep "kernel command line" ``` --- #### 2. **动态调整(临时生效,部分系统支持)** 某些内核版本支持通过`sysctl`动态调整缓冲区大小,但需内核编译时启用`CONFIG_LOG_BUF_SHIFT`选项[^4]。 **示例**: ```bash # 设置缓冲区大小为16MB(需计算为2的幂次) sudo sysctl kernel.log_buf_len=16777216 ``` --- #### 3. **内核编译参数调整(高级方法)** 若需彻底修改默认大小,可重新编译内核时设置`CONFIG_LOG_BUF_SHIFT`参数: ```bash CONFIG_LOG_BUF_SHIFT=21 # 2^21 = 2MB ``` 此方法需熟悉内核编译流程[^4]。 --- #### 4. **日志级别过滤(减少覆盖风险)** 通过调整日志级别保留更多信息(不直接改变缓冲区大小): ```bash sudo dmesg -n debug # 记录所有级别日志 ``` 或在内核参数中添加`ignore_loglevel`[^3]。 --- #### 注意事项 1. **兼容性**:`log_buf_len`参数需内核支持,部分旧版本可能无效。 2. **内存占用**:缓冲区大小增加会占用更多内核内存(非用户空间内存)[^4]。 3. **日志持久化**:缓冲区满后新日志会覆盖旧内容,建议结合`rsyslog`或`journald`持久化存储[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值