c++ 排查一次内存错乱问题

背景

最近工程项目实现个功能,出现了BUG,记录一下
场景简述如下:
有个模块,一组线程池来做类似任务的格式化操作。每个任务包含若干条数据。
但是发现跑一段时间,会出现输出数据错乱,或者数据校验不正确的问题,而且每次位置都不相同,偶尔core的位置也不相同。初步看了下,怀疑是内存错乱了或者内存写坏了

分析

  1. 初步review了新加的代码应该没问题的,同时分析代码逻辑,怀疑数据错乱一定发生在了格式化的模块中
  2. 打开Debug日志,观察了如下有效信息:
    前一个组件A[数据格式化之前的模块],打印出了每个任务,以及包含具体的数据个数
    在格式化模块,发现一个规律,包含大于100条的数据的任务,都没有正常统计打印出来
  3. 分析了下逻辑,之前做了优化:批量格式化功能,简述是默认100为最小粒度在同一个线程工作;超过100,然后会轮转到别的线程,提高并发度。怀疑并发内存写坏了。
  4. 结论:任务使用的一个内存分配器不是线程安全的~~~导致当单个任务超过100条数据,出现多线程场景下,分配的内存不能保证线程安全,从而内存写坏
  5. 修复方案:改变新加的任务内存分配器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值