目录

page_owner-和-slub_debug-的作用和使用方法

目录

page_owner 和 slub_debug 的作用和使用方法

1. page_owner

- 作用:

  • 用于跟踪每个内存页的分配者,帮助开发者调试内存泄漏或定位内存占用过多的问题。

- 功能:

  • 当内存页被分配时,记录分配的调用栈、页的分配顺序等信息。

  • 提供准确的内存碎片统计数据。

  • 帮助分析哪些模块或代码路径占用了大量内存。

- 使用方法:

  • 在内核命令行中添加参数:page_owner=on。

  • 启用后,系统会记录每个内存页的分配信息,供后续分析。

- 典型场景:

  • 调试内存泄漏。

  • 分析内存分配热点。

2. slub_debug

- 作用:

  • 用于调试 SLUB 分配器(Linux 内核中的内存分配机制),帮助检测内存相关问题,例如内存踩踏、内存越界或使用已释放的内存(use-after-free)。

- 功能:

  • 提供多种调试选项,例如:

  • F:一致性检查(Sanity Checks)。

  • Z:红区保护(Red Zoning),在内存块周围添加保护区域。

  • P:内存填充(Poisoning),在分配和释放时填充特定值以检测非法访问。

  • U:用户跟踪(User Tracking),记录分配和释放的调用栈。

  • 支持对特定的 slab 缓存启用调试,而不是全局启用,减少性能影响。

- 使用方法:

  • 在内核命令行中添加参数:slub_debug=<选项>,例如:

  • slub_debug=FZ:启用一致性检查和红区保护。

  • slub_debug=FZP,zs_handle:对特定 slab(如 zs_handle)启用调试。

  • 运行时也可以通过 /sys/kernel/slab/<slab_name>/ 修改调试选项。

- 典型场景:

1.调试内存踩踏问题。

2.检测内存分配和释放中的异常行为。

总结:

工具主要功能典型用途
page_owner跟踪内存页分配者,记录调用栈调试内存泄漏,分析内存占用热点
slub_debug调试 SLUB 分配器,检测内存相关问题内存踩踏、越界、use-after-free 等