面试题答案
一键面试- 安装工具
memory_profiler
:可以使用pip install memory_profiler
进行安装。objgraph
:使用pip install objgraph
安装。
- 使用
memory_profiler
分析内存使用情况- 装饰函数:
在要分析的函数定义前加上
@profile
装饰器,例如:
- 装饰函数:
在要分析的函数定义前加上
from memory_profiler import profile
@profile
def your_function():
# 函数具体代码
pass
- **运行方式**:
有两种运行方式。一是直接在脚本开头添加if __name__ == '__main__':
代码块并调用函数,然后使用python -m memory_profiler your_script.py
运行脚本。二是在交互式环境中导入函数并运行,在导入模块前设置import memory_profiler; memory_profiler.profile(your_function)()
。关键函数为profile
装饰器。
3. 使用objgraph
排查内存泄漏
- 追踪对象数量:
在程序的关键位置(如循环开始和结束处)使用objgraph.count('type_name')
来统计特定类型对象的数量。例如,如果怀疑MyClass
类对象可能导致内存泄漏,可在相关代码段中添加objgraph.count('MyClass')
。关键函数为count
。
- 查找对象引用关系:
使用objgraph.show_growth()
函数,它会显示程序运行过程中新增对象数量增长最快的前10种类型。如果发现某个可疑类型,可使用objgraph.show_backrefs(objgraph.by_type('type_name')[0])
来查看该类型某个对象的反向引用关系,找出可能导致对象无法释放的引用。关键函数为show_growth
和show_backrefs
。