使用 psutil 和 psleak 检测 C 扩展中的内存泄漏
💡
原文英文,约1000词,阅读约需4分钟。
📝
内容提要
psutil 7.2.0 引入了新 API,用于检测 Python C 扩展中的内存泄漏。新函数 heap_info() 和 heap_trim() 有助于识别和减少内存泄漏。此外,psleak 工具可以自动检测 C 扩展的内存泄漏,增强了 Python 项目的调试能力。
🎯
关键要点
- psutil 7.2.0 引入了用于检测 C 扩展内存泄漏的新 API。
- 新函数 heap_info() 和 heap_trim() 可以帮助识别和减少内存泄漏。
- heap_info() 提供了直接的分配器统计信息,包括当前通过 malloc() 分配的字节数。
- heap_trim() 提供了一种请求释放未使用内存的跨平台方法,主要用于泄漏检测工具。
- psleak 是一个新的工具,可以自动检测 C 扩展的内存泄漏,增强了 Python 项目的调试能力。
- psleak 通过多次调用目标函数并跟踪内存变化来识别内存泄漏。
- psutil 现在不仅是一个监控库,还是一个实用的调试工具,特别适用于依赖 C 扩展的 Python 项目。
❓
延伸问答
psutil 7.2.0 新增了哪些功能来检测 C 扩展的内存泄漏?
psutil 7.2.0 引入了 heap_info() 和 heap_trim() 两个新 API,用于检测 C 扩展中的内存泄漏。
heap_info() 函数提供了哪些内存分配统计信息?
heap_info() 提供了当前通过 malloc() 分配的字节数、通过 mmap() 分配的字节数,以及在 Windows 上创建的私有堆的数量。
heap_trim() 的主要用途是什么?
heap_trim() 主要用于请求释放未使用的内存,帮助减少内存泄漏检测中的噪声。
psleak 工具是如何检测 C 扩展的内存泄漏的?
psleak 工具通过多次调用目标函数并跟踪内存变化来识别内存泄漏,若内存持续增长则标记为泄漏。
使用 psutil 检测内存泄漏的基本步骤是什么?
基本步骤包括:先获取堆的基线快照,调用 C 扩展多次,然后再获取快照并比较内存使用情况。
为什么传统的内存指标无法检测 C 扩展中的内存泄漏?
传统内存指标如 RSS 和 VMS 无法检测 C 扩展中的内存泄漏,因为 Python 的内存分配器位于平台的本地堆之上,导致某些内存分配不被监测到。
➡️