找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1834|回复: 0
打印 上一主题 下一主题
收起左侧

疑神疑鬼找bug

[复制链接]
跳转到指定楼层
楼主
ID:127229 发表于 2016-6-19 02:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨晚遇到神奇问题,网关做压力测试,在CPU很高的时候会崩溃,看堆栈,都是崩溃在_heap_alloc这个函数里面,百思不得其解,以为是内存碎片导致的,写了一段检测代码,可的捕获到内存碎片严重,new 几个字节都会失败,特别是在cpu高的时候,以为是我大量使用std::string 和map之类容器问题,以为找到了原因,然后就是各种折腾,折腾了一晚上没解决。今天早上睡了个饱觉,过来再想出了一下,感觉不应该是内存碎片的问题。如果是内存碎片,不应该在堆分配时抛访问越界异常,然后使用分解方法,把一个个模块拆下来单独测,搞了一上午,终于找到原因了,原来在写日志模块里面,有一个多线程写环型队列加锁有问题,没锁成。就这样导致了多线程同时操作queue,导致堆被破坏,在_heap_alloc时,可有是内部进行了资源回收整理,然后就崩溃了。改了二行代码,把bug修复了,中午吃饭时就让压力在跑,跑了几百万,啥事都没了。

后来总结了一下,这种神奇问题基本都是自已的事情,想在操作系统上找理由是不行的。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表