内存泄漏分析
Step内的内存问题主要包括内存泄漏、踩踏、内存碎片,导致内存池空闲、内存过多等问题,msLeaks工具当前仅支持Step内内存泄漏问题的定位。
前提条件
- 请使用Step内内存分析功能时,如果需要设置--events参数,请确保--events参数中包含alloc和free。
- 在使用Step内内存分析功能时,请勿设置--steps参数。
在线方式
在进行Step内内存分析时,需配合使用mstx打点功能进行问题定位,mstx打点详情参考《MindStudio mstx API参考》。
离线方式
msLeaks支持对指定范围内的内存事件进行离线泄漏分析。使用mstx标识好泄漏分析的范围后,可以使用该功能对落盘文件进行分析。

当前离线内存泄漏分析功能仅支持HAL内存泄漏分析。
- 工具部署
msLeaks工具进行离线内存泄漏分析时,需先安装开放形态部署场景,安装操作请参见。
- 开放态部署场景安装成功后,开启2个远程登录工具,分别登录Host侧和Device侧进行操作。
- 参考《CANN 软件安装指南》下载Ascend-cann-toolkit软件包,并解压。
- 请根据实际情况自行将Host侧的用户测试文件与msLeaks工具上传至Device侧。
msleaks工具包一般位于“Ascend/ascend-toolkit/{version}/tools/msleaks” 路径下,具体路径以实际安装路径为准。
传输文件时,需打开SSH服务。文件传输完成后,请及时关闭SSH服务,保证系统安全性。SSH服务具体操作请参见的“定制文件系统 > 修改文件系统 > 打开SSH服务”章节。
- 将Host侧的ACL相关依赖上传至Device侧。
当前ACL相关依赖在Host侧的“/usr/local/AscendMiniOs/acllib/lib64”路径下,需要将依赖上传至Device侧的“/usr/local/AscendMiniOs/aarch64-linux/data”路径下,Host侧和Device侧的具体路径以实际安装路径为准,请根据实际情况自行上传。
- 在Device侧执行以下命令,在Device侧设置环境变量。
export LD_LIBRARY_PATH=./lib:./lib64:./:./home/HwHiAiUser:$LD_LIBRARY_PATH;export ASCEND_OPP_PATH=./;
- 在Device侧,确认缺少的so包。
- 用户测试文件运行前,在Device侧,执行以下命令,查看缺少的so包。此处的MyApplication为用户测试文件。
ldd ${MyApplication}
- 用户测试文件运行后,如果出现类似以下回显信息,代表Device侧缺少so包。
libascendcl_impl.so: cannot open shared object file: No such file or directory
- 用户测试文件运行前,在Device侧,执行以下命令,查看缺少的so包。此处的MyApplication为用户测试文件。
- 在Host侧查找缺少的so包,大部分so包存在于“/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64/”路径下。
也可在Host侧执行以下命令,查询缺失的so包所在路径。其中soName为so包的名称。
find / -name ${soName}
- 将Host侧的so包上传至Device侧,请根据实际情况自行上传。
- 内存分析
- 对需要检测泄漏的范围进行mstx的mark打点。mstx打点详情参考《MindStudio mstx API参考》。
- 打点的mark信息将用于离线分析接口的输入。
- 使用mark打点功能标记三个点,分别称为A、B、C。在A到B范围内申请的内存,需要在C点前全部释放,否则会被判定为内存泄漏。
- 执行以下命令,使用msLeaks工具拉起用户程序,获取落盘csv文件,Application为用户程序。
msleaks ${Application}
- 执行以下命令,调用Python接口,对结果件中的csv文件进行离线泄漏分析。
python import msleaks msleaks.leakchecker.run("csv_path","mstx_info",0)
其中参数信息如下:
- csv_path:csv文件所在路径,需使用绝对路径。
- mstx_info:mark打点使用的mstx文本信息,用于标识泄漏分析的范围。
如果出现图5的回显信息,表示存在内存泄漏问题。
- 对需要检测泄漏的范围进行mstx的mark打点。mstx打点详情参考《MindStudio mstx API参考》。
父主题: 内存分析