昇腾学院 | 案例分享 业务踩内存问题

举报
xiongoal 发表于 2020/03/25 02:17:56 2020/03/25
【摘要】 问题现象描述:问题现象:客户在运行视频分析业务时,业务流程如下图:当执行人脸登记业务时,即上图中的左边支路,会使得device侧程序core dump。 关键过程、根本原因分析关键过程:1.通过gdb调试,确定core dump发生于视频流解码处:如下图所示:2.排查memcpy失败原因。将memcpy处理的内存地址以及内存大小进行打印,发现内存大小正确如下图所示。因此不会因为内存越界导致m...

问题现象描述:

问题现象:客户在运行视频分析业务时,业务流程如下图:


当执行人脸登记业务时,即上图中的左边支路,会使得device侧程序core dump

 1.png


关键过程、根本原因分析

关键过程:

1.通过gdb调试,确定core dump发生于视频流解码处:如下图所示:

1.png

2.排查memcpy失败原因。将memcpy处理的内存地址以及内存大小进行打印,发现内存大小正确如下图所示。因此不会因为内存越界导致memcpy失败。猜测可能是内存被踩。

1.png

1.png

3.逐步缩小定位范围。保持视频分析业务运行,从下至上逐个关闭线程,再进行人脸登记操作,定位出face_detection人脸检测线程导致了程序崩溃。

4.检视face_detection线程代码中的释放内存操作,对每个释放内存操作进行验证,最终定位出导致程序崩溃的代码段,如下图所示:

1.png

根本原因分析:

1、申请内存时,程序按照输入图片的实际大小进行申请。

2、但是在释放内存时,程序对图片大小进行了2MB的大小对齐,导致在释放内存时,释放大小要比实际内存要大,内存被踩,最终导致device侧程序出现core dump


结论、解决方案及效果

结论:

1、程序释放内存时的大小超出了实际申请的内存大小,踩内存导致程序崩溃。

解决方案:

1、  去除内存大小的对齐,释放实际大小的内存,即可解决问题。如下图所示:

1.png

经验总结、预防措施和规范建议

1、  对于程序崩溃,例如core dumpsegment fault等问题,可以借助GDB工具,一步步定位问题所在。

2、  对于内存操作,最好使用智能指针进行管理,防止指针操作之间发生踩内存。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。