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 等 |