一处内存泄漏排查

一处内存泄漏:

稳定性测试抛出了内存泄漏问题,内存在24小时内从150M涨至350M

上测试机排查:

!heap -l

发现大量28字节,18字节左右的小内存泄漏db看一下泄漏内容

大量的内存地址指向swmanager\0 这个字符串,代码中搜索swmanager” 发现有10几处使用裸的字符串。

咨询对应的研发RD发现其中关于tips逻辑引用最频繁:

该处为在构造函数内的引用,怀疑对象释放有问题,排查对象的相关构造析构函数并断点:

1 e 5f692850 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::TipsWndWorkingData

2 e 5f67d4c0 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::TipsWndWorkingData

3 e 5f632a80 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::~TipsWndWorkingData

4 e 5f632b00 0001 (0001) 0:** BDSWManagerView!TipsWndWorkingData::`scalar deleting destructor’

一处构造函数,一处拷贝构造函数,一处析构函数,一处虚析构函数。

执行相应逻辑:

1号断点命中1次,2号断点命中2次,3好命中2次4号命中1次。

可以确认,析构函数少调用了一次。排查代码后发现,对象被强转为void*,再delete导致无法正确析构。

void TipsWndHandler::HandleMsg(int const MessageCategoryCode, const void* const pRecvData)
{
    TipsWndWorkingData * data = static_cast<TipsWndWorkingData const *>(pRecvData)->clone() ;
    ...
    }
    delete pRecvData ;
    delete data ;
}
时间: 2024-10-20 10:04:10

一处内存泄漏排查的相关文章

内存泄漏排查之:Show me your Memory

java 语言有个神奇的地方,那就是你时不时会去关注下内存.(当然了,任何牛逼的同学都应该关注内存) 今天我们就来这么场景吧:某应用运行了一段时间后,ecs监控报警了,内存比较高了,怎么办?随着时间的推移,发现内存越来越高(但是又不会打到100%),怎么办? 凡事讲究证据,报警说内存紧张就紧张吗,还得自己去验一下. 如何确认内存问题?这太重要了! 以下是几种查看内存问题的方法:(爱信不信啊) 1. top 等查看系统内存概况 top:内存去,按M按照内存大小排序,立马看到罪魁祸首.具体命令请参考

内存泄漏排查

1:问题如下  docker部署了一个有定时任务的服务 内存占用较高 服务虽然没挂但是前端登录不上  服务开始运行是没有问题的 运行一段时间后 内存会上升差不多2个G 怀疑是内存泄漏 2:在本地开启定时任务 跟踪排查 定时任务多次执行后 后台抛出异常 (很高兴本地会有异常 可追查) 源码抛出异常的位置如下 后台打印的异常信息 (最初的时候看到failed to create a child event loop 百度了一下 说什么idear的防火墙问题 所以我就没有关注(不要太相信百度) 直到看

手工实现一个野指针识别和内存泄漏排查工具

// beforeMain.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; union Align; class CTest { public: int A; double B; CTest() { cout<<"构造函数"<<endl; } ~CTest() { cout<<"析构&qu

iOS 内存泄漏排查以及处理

使用Xcode7的Instruments检测解决iOS内存泄露 文/笨笨的糯糯(简书作者)原文链接:http://www.jianshu.com/p/0837331875f0 作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode7自带

轻松排查线上Node内存泄漏问题

I. 三种比较典型的内存泄漏 一. 闭包引用导致的泄漏 这段代码已经在很多讲解内存泄漏的地方引用了,非常经典,所以拿出来作为第一个例子,以下是泄漏代码: 'use strict'; const express = require('express'); const app = express(); //以下是产生泄漏的代码 let theThing = null; let replaceThing = function () { let leak = theThing; let unused =

Facebook 的 iOS 内存泄漏监测自动化实践

内存是移动设备上的共享资源,如果一个 App 无法正确地进行内存管理的话,将会导致内存消耗殆尽,闪退以及性能的严重下降. Facebook 的 iOS 版本的许多功能模块共用了同一份内存空间,如果其中的某一个模块消耗了特别多的内存资源的话,将会对整个 App 造成严重影响.举个栗子,当某个功能模块不小心造成了内存泄漏的时候,这个情况就很有可能会发生. 在 Facebook,我们有非常多的工程师同时在一个代码仓库下进行并行开发.内存泄漏是在开发过程中难以避免会遇见的问题.当内存泄漏发生时,我们就需

iOS 内存泄漏监测自动化

在 Android 上,Square 这家公司提供了非常有名的工具: leakcanary ,来帮助开发者们在日常开发过程中就能够发现内存泄漏.但在 iOS 上呢?在 Google 的时候,我发现了两个工具,一个是这篇文章将要翻译并介绍的 Facebook 开源的三件套,另一个则是国内微信阅读团队做的 MLeaksFinder . 关于 MLeaksFinder 这里有两篇其官方提供的文章介绍: MLeaksFinder:精准 iOS 内存泄露检测工具 MLeaksFinder 新特性 简而言之

vc++ 程序内存泄漏的排查

今天刚学习的,怎样快速准确的查看内存泄漏,马上用到项目中~~~~ 使用_CrtDumpMemoryLeaks,这个函数在crtdbg.h头文件中,一般vc++程序可以直接引用.CrtDumpMemoryLeaks()是显示当前的内存泄漏. 注意"当前"的意思是说当它执行时,所有未销毁的对象均会报内存泄漏.如果是想查程序有没有内存泄漏的话,尽量把这个函数往后面放:如果是检查某个地方的指针内容是否被完全释放,可以写在这个释放之后~~ 当然这个是用在调试模式中,Crt会把前面分配过的内存的文

APP排查内存泄漏最简单和直观的方法

    内存泄漏无疑会严重影响用户体验,一些本应该废弃的资源和对象无法被释放,导致手机内存的浪费,app使用的卡顿,那么如何排查内存泄漏呢? 当然,首先我们有google的官方文档可以参考,大部分博客的方法也来自于此.总的来说,就是使用android studio 的monitor memory功能监测app主进程占用的内存,触发GC操作,而后观察内存的占用情况,如果在使用的过程中内存不断增加,没有回落,很有可能发生了内存泄漏,这时候就需要导出内存分配的具体详情进行深入分析了. 内存监测曲线 但