昇腾学院 | 案例分享 Atlas 800 3010 多路rtsp流业务处理中host端内存申请失败问题

举报
xiongoal 发表于 2020/03/30 16:31:26 2020/03/30
【摘要】 问题现象描述问题现象:运行288路rtsp流人脸识别业务,业务长时间稳定性测试过程中,host端内存不断下降,直到500M~1G左右,host端日志报错,无法申请内存,如图所示:关键过程、根本原因分析关键过程:1、业务刚开始运行,查询内存使用情况,服务器操作系统total:125G,used:28G,free:85G,buff/cache:11G,如下图:2、随着稳定性测试时间加长,free...

问题现象描述

问题现象:运行288rtsp流人脸识别业务,业务长时间稳定性测试过程中,host端内存不断下降,直到500M~1G左右,host端日志报错,无法申请内存,如图所示:

1.png

关键过程、根本原因分析

关键过程:

1、业务刚开始运行,查询内存使用情况,服务器操作系统total125Gused28Gfree85Gbuff/cache11G,如下图:

2.png

2、随着稳定性测试时间加长,free一直在下降,buff/cache一直在上升,如下图:

3.png

3free内存的下降速度10G/1h,内存不断下降到500M左右,由日志查看错误信息,host端无法申请到256kb大小内存,导致device端解码超时,出现程序重启现象,此时内存情况如下图:

1.png

4程序稳定性测试过程中,防止I/O频繁操作,数据不断缓存,通过删除日志动作,used内存恢复到70G左右,由此大部分内存消耗是缓存日志导致的。

5操作系统设置自动回收内存机制,触发kswapd内核进程工作进行释放,保证操作系统hostfree内存介于low阈值和high阈值之间,经过客户业务长时间稳定性验证,内存阈值设置在5G左右合理。

根本原因分析:

12881080p视频流送入vdec模块解码,客户使用malloc方式申请的内存,通过图像预处理后,会产生大量的小于256kb的内存碎片,以至于当free内存达到500M~1G左右,host端无法申请大于256kb的内存。

2、客户产生的日志没有进行及时的清理,导致占用更有的内存。

结论、解决方案及效果

结论:

1、用HIAI_DMalloc方式申请送入vdec模块的内存数据,避免产生大量的内存碎片。

2、设置合理的内存回收机制,保证操作系统有可用的内存容量。

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

1、使用HIAI_DMalloc内部接口申请host端输入数据的内存。

2、操作系统一般默认的内存回收阈值比较小,对于内存碎片多的场景,建议设置合理的内存回收机制。具体请查收链接:https://blog.csdn.net/zhanglu0223/article/details/77574110



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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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