【问题标题】:Kernel memory leak detector内核内存泄漏检测器
【发布时间】:2019-09-09 20:41:30
【问题描述】:

我在内核黑客中启用了“内核内存泄漏检测器”选项并重建/重新启动系统,现在 kmemleak 文件存在于 /sys/kernel/debug 文件夹中,但似乎我无法通过“echo”触发扫描scan > /sys/kernel/debug/kmemleak”,我已经将 debugfs 挂载到 /sys/kernel/debug,但是当我尝试触发扫描时,它给了我“-bash: echo: write error: Device or resource busy”。我的猜测是这是因为我在 /sys 文件夹中没有写权限,即使我是 root 用户。任何建议如何解决这个问题?非常感谢。

我试过了

【问题讨论】:

  • 如果禁用了 kmemleak,则 kmemleak sysfs 写入处理程序返回 EBUSY。您是否通过回显off 关闭了kmemleak?如果不是,Linux 内核是用 CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y 构建的吗?您是否尝试过通过 Linux 内核 bootargs/cmdline 引导 kmemleak=on
  • 我没有回显,未设置 CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF(我检查了我的 .config 文件),我也尝试过重新启动“kmemleak=on”并且我做了“回显扫描 > /sys/kernel /debug/kmemleak" 重新启动后,它仍然给我同样的错误。

标签: c linux-kernel kernel


【解决方案1】:

在使用 kmemleak 时,您需要检查几件事。

检查是否正在传递任何引导参数或命令行参数kmemleak=off

在您的启动日志中,检查您是否有任何与 kmemleak 相关的日志,尤其是类似以下日志的日志

kmemleak: Kernel memory leak detector disabled
kmemleak: Early log buffer exceeded (919), please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE

很可能,我认为您需要配置CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE。如果在启动过程中,kmemleak 的日志大小增加到超过 linux 内核配置中设置的限制,kmemleak 将被禁用。

所以,配置CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE 并增加大小。此选项也在kernel hacking 下。我正在使用内核源代码 4.19.9 并附上屏幕截图以供参考。 Maximum kmemleak early log entries 是字段,您可能需要将其设置为更高的值(例如 4096)。

【讨论】:

  • 顺便说一句,CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE 在 5.5 中重命名为 CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE。另外,我发现明确传递 kmemleak=on 解决了手头的问题...
猜你喜欢
  • 2022-06-11
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多