Step内内存分析
Step内的内存问题主要包括内存泄漏、踩踏、内存碎片,导致内存池空闲、内存过多等问题,msLeaks工具当前仅支持Step内内存泄漏问题的定位。
前提条件
- 请使用Step内内存分析功能时,如果需要设置--events参数,请确保--events参数中包含alloc和free。
- 在使用Step内内存分析功能时,请勿设置--steps参数。
工具使用
在进行Step内内存分析时,需配合使用mstx打点功能进行问题定位,mstx打点详情参考《性能调优工具用户指南》中的“mstx API参考”章节内容。
- 使用msLeaks工具拉起用户程序,application为用户程序。
msleaks application
- 执行完成后,会出现如下两种回显信息。
- 如果出现如下回显信息,表示存在内存泄漏问题。回显信息中分别展示了每张卡内存泄漏的汇总信息,包括泄漏发生的Step数、关联的kernel、地址以及泄漏大小等信息。
图1 内存泄漏
- 如果出现如下回显信息,表示存在内存波动。回显信息中展示了单个Step内的内存波动(用最小和最大的内存池分配占用比值定义)以及最小的内存池分配占用,同时给出最小比值和最大比值作为参考,用户可根据该值判断是否存在内存泄漏风险。
在第一个Step时,内存尚未稳定,所以只支持分析从第二个Step开始的内存波动,第一个Step内存波动可忽略。
图2 内存波动
- 如果出现如下回显信息,表示存在内存泄漏问题。回显信息中分别展示了每张卡内存泄漏的汇总信息,包括泄漏发生的Step数、关联的kernel、地址以及泄漏大小等信息。
- 将结果件中的json文件(可视化内存信息)使用可视化工具展示,如图3所示,可查看内存申请释放情况。
- 用户的打点信息如图4所示,当泄漏内存申请的时间与箭头标识的时间重合时,表示此时mstx打点位置附近的代码发生了内存泄漏。
父主题: 内存分析