标题: 疑神疑鬼找bug [打印本页]

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

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








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1