free后malloc(fullRAM-10)偶发失败的OOM测试问题排查
低内存OOM测试中的malloc失败问题排查与解决
测试环境搭建
- 为验证代码在低内存场景下的表现,实现了
oom_setup函数,借助setrlimit()系统调用限制进程的可用内存上限 - 封装了
OOMTEST_BEGIN和OOMTEST_END宏,用于快速构建内存耗尽的测试环境
问题现象
- 测试过程中出现偶现问题:释放掉占用全部可用内存的
_oomfill内存块后,执行malloc(cur-10)时偶尔会失败,进而触发程序abort - 尝试改用
realloc替代free+malloc的操作组合,问题依旧存在
排查与解决
- 经过调试排查,最终确认问题根源是循环逻辑的条件错误,修正while循环的判断条件后,该偶现问题彻底消失
内容的提问来源于stack exchange,提问作者François Cerbelle
相关产品推荐
相关产品推荐

