标签: memory-leak-detector

文件描述符泄漏示例?

在Android中是否有任何好的示例来演示文件描述符泄漏?我读到某个地方,如果我们不关闭流,例如FileInputStream,FileOutputStream但我找不到任何好的参考示例来证明它.

请分享一些博客/代码段.谢谢!

java android memory-leaks file-descriptor memory-leak-detector

9
推荐指数
1
解决办法
8908
查看次数

如何对守护程序进行内存检查?

我编写了一个C++应用程序,它一直运行直到手动终止.它监视其他重要应用程序.因此,我的守护进程应用程序不应该关闭.记住这一点,我想看看我的应用程序中是否有任何内存泄漏.我使用了valgrind,但由于这个应用程序一直在运行,因此valgrind不会退出.如果我做一个控件 - C然后我没有从valgrind日志文件中获得完整的信息.

有没有一种工具可以做Valgrind的工作?

c++ valgrind memory-leaks memory-management memory-leak-detector

8
推荐指数
1
解决办法
7056
查看次数

如何追捕内存泄漏valgrind说不存在?

我有一个程序接受来自套接字的数据,进行一些质量控制并对其进行各种其他调节,然后将其写入命名管道.我在上面运行valgrind并修复了最初存在的所有内存泄漏.然后我在一个系统上创建了一个'demo'环境,在这个系统中我运行了32个这个程序的实例,每个实例都输入了唯一的数据,每个数据输出到它自己的管道.我们对它进行了测试,一切看起来都很好.然后我尝试通过提高数据发送速率到荒谬的速度进行压力测试,事情看起来很好......但是我的程序在没有剩余资源之前一直在消耗越来越多的内存.

我转向valgrind并运行完全相同的设置,除了使用leak-check = full在valgrind中运行的每个程序.发生了一些奇怪的事情.首先,内存确实泄漏了,但只是到了每个程序耗尽的程度.我的内存占了9%(之前最大的内存占了我内存的6%).随着valgrind运行程序的CPU成本上升,我现在处于100%cpu且负载平均值很大,因此缺少可用的CPU可能会导致程序运行缓慢,泄漏时间太长而无法显示.当我尝试停止这些程序时,valgrind没有显示直接内存泄漏,它显示了一些潜在的内存泄漏,但我检查了它们,我不认为它们中的任何一个代表真正的内存泄漏; 此外,当程序消耗超过100 MB时,可能的内存泄漏仅显示为几千字节.valgrind报告的可达(非泄漏)内存也在KB范围内,因此valgrind似乎相信我的程序消耗的是Top所说的他们正在使用的内存的一小部分.

我已经进行了一些其他测试并获得了奇怪的结果.一个程序,甚至以我检测到的原始内存泄漏速率的三倍运行,似乎从不消耗超过.9%的内存,两个程序分别泄漏到1.9和1.3%的内存,但没有更多等等,就好像泄漏的内存量和泄漏的速率在某种程度上取决于我的程序一次运行多少个实例; 这没有任何意义,每个实例应该100%独立于其他实例.

我还发现如果我运行32个实例,只有一个实例在valgrind中运行valgrinded实例(如果我说它是一个单词!)泄漏内存,但速度比在valgrind之外运行的速度慢.valgrind实例仍然会说我没有直接泄漏,报告的内存消耗远低于Top显示.

我对于导致这个结果的原因感到很难过,为什么valgrind拒绝意识到内存泄漏.我认为它可能是一个外部库,但我并没有真正使用任何外部库; 只是基本的C++函数/对象.我还认为它可能是写入输出管道的数据快速导致缓冲区无限增长,但1)应该有一个上限,这样的缓冲区可以增长和2)一旦内存泄漏,如果我删除数据输入率没有任何记忆保持消耗,而是慢慢回落到合理的数量.

任何人都可以给我一个关于我应该从哪里看的提示吗?我完全难以理解为什么记忆以这种方式表现.

谢谢.

c++ valgrind memory-leaks memory-leak-detector

8
推荐指数
1
解决办法
1206
查看次数

使用pandas数据帧泄漏内存

pandas.DataFrame在多线程代码中使用(实际上是DataFrame被调用的自定义子类Sound).我注意到我有内存泄漏,因为我的程序的内存使用量逐渐增加超过1000万,最终达到我的计算机内存的约100%并崩溃.

我使用objgraph来尝试跟踪这个泄漏,并发现实例的MyDataFrame数量一直在增加而它不应该:它的run方法中的每个线程都创建一个实例,进行一些计算,将结果保存在文件中退出...所以不应该保留任何参考.

使用objgraph我发现内存中的所有数据帧都有一个类似的参考图:

在此输入图像描述

我不知道这是否正常......看起来这就是将我的物品留在记忆中的原因.任何想法,建议,见解?

python memory-leaks memory-leak-detector pandas objgraph

8
推荐指数
1
解决办法
6362
查看次数

如何使用Clang查找内存泄漏

我已经在我的机器(ubuntu)中安装了Clang,以便在我的C代码中找到内存泄漏.我写了一个示例代码,以检查它的工作情况,如下所示:

/* File: hello.c for leak detection */
#include <stdio.h>
#include <stdlib.h>

void *x;

int main() {
  x = malloc(2);
  x = 0; // Memory leak
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我发现在互联网上有一些选项可以编译

$ scan-build clang --analyze hello.c
Run Code Online (Sandbox Code Playgroud)

$ scan-build clang -fsanitize=address hello.c
Run Code Online (Sandbox Code Playgroud)

但他们都没有表现出任何内存泄漏的迹象.

scan-build:使用'/ usr/bin/clang'进行静态分析
scan-build:删除目录'/ tmp/scan-build-2015-07-02-122717-16928-1',因为它不包含任何报告.
scan-build:找不到错误.

任何人都可以告诉如何正确使用Clang进行内存泄漏检测.

c memory-leaks clang clang-static-analyzer memory-leak-detector

8
推荐指数
1
解决办法
3335
查看次数

难以使用IE Javascript泄漏检测器

当使用某些Javascript代码模式时,Microsoft的IE6和IE7浏览器会遭受内存泄漏.在IE6早期,我已经找到了很多关于泄漏模式的信息.但是,我知道很多(但不是全部)这些都是在IE7和IE6的服务包中修复的.我无法找到关于IE6和IE7修补版本中仍然存在哪些泄漏的可靠信息来源.

有几种工具可以检测泄漏模式.但我似乎无法按照我想要的方式使用它们!

  • 微软的(V2)内存泄漏检测器在我的代码中找不到任何泄漏,即使我使用的模式应该泄漏.这可能是因为我正在运行IE8 - 是否有任何非头痛的方式让它假装是IE6或IE7?

  • Drip和sIEve似乎发现了"孤儿"品种的大量泄漏.当然这些必须是误报 - 实际上我添加到文档然后再删除的每个元素都列出了,我不相信我会继续引用它们.如果它们是真实的,我怎样才能找到我的代码中泄漏的位置?这些工具具有"属性"功能,不显示任何内容,使其看起来很破碎.同样,我不知道这些泄漏是否与IE6或IE7相关,或者只是IE8,这是我安装的IE的版本.

所以我真的想知道哪些类型的内存泄漏仍然是修补版本的IE6和IE7的问题,以及如何使用工具帮助我在我的实时代码中有效地找到它们.

有帮助吗?

javascript memory-leaks internet-explorer-7 internet-explorer-6 memory-leak-detector

7
推荐指数
1
解决办法
2086
查看次数

直接泄漏和间接泄漏有什么区别?

我从LeakSanitizer工具获得以下输出。正如工具所了解的那样,直接泄漏和间接泄漏有什么区别?

13: ==29107==ERROR: LeakSanitizer: detected memory leaks
13: 
13: Direct leak of 288 byte(s) in 6 object(s) allocated from:
13:     #0 0x7f2ce0089050 in __interceptor_malloc (/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so+0xd9050)
13:     #1 0x7f2cdfb974fe in qdr_core_subscribe ../src/router_core/route_tables.c:149
13:     #2 0x7f2cdfb47ff0 in IoAdapter_init ../src/python_embedded.c:548
13:     #3 0x7f2cde966ecd in type_call (/nix/store/1snk2wkpv97an87pk1842fgskl1vqhkr-python-2.7.14/lib/libpython2.7.so.1.0+0x9fecd)
13: 
13: Indirect leak of 2368 byte(s) in 1 object(s) allocated from:
13:     #0 0x7f2ce0089b88 in __interceptor_posix_memalign (/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so+0xd9b88)
13:     #1 0x7f2cdfbcc8ea in qd_alloc ../src/alloc_pool.c:182
13:     #2 0x7f2cdfbb6c6b in qd_server_connection ../src/server.c:500
13:     #3 0x7f2cdfbbe27d in on_accept ../src/server.c:531
13: …
Run Code Online (Sandbox Code Playgroud)

valgrind memory-leaks memory-leak-detector leak-sanitizer

7
推荐指数
2
解决办法
2837
查看次数

GCC和-fsanitize =泄漏

我正在使用一个大型的C++项目并使用clang编译它会很痛苦,所以我坚持使用GCC.

我想-fsanitize=leak在之前的工作中使用我已经和clang 一起使用的漂亮旗帜,但它似乎不起作用.

我做了一个非常简单的例子来测试它:

#include <stdlib.h>
void FooBar() {
  malloc(7);
}
int main() {
  FooBar();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用clang它按预期工作:

>> clang -fsanitize=leak main.cpp
>> LSAN_OPTIONS=detect_leaks=1 ./a.out
=================================================================
==18052==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 7 byte(s) in 1 object(s) allocated from:
#0 0x41dcbc  (~/dev/addresssanitizertest/a.out+0x41dcbc)
#1 0x431ac3  (~/dev/addresssanitizertest/a.out+0x431ac3)
#2 0x431ae3  (~/dev/addresssanitizertest/a.out+0x431ae3)
#3 0x7f8077e71a3f  (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f)
SUMMARY: LeakSanitizer: 7 byte(s) leaked in 1 allocation(s).
>>
Run Code Online (Sandbox Code Playgroud)

但是使用gcc似乎没有发现任何东西:

>> gcc -fsanitize=leak main.cpp
>> LSAN_OPTIONS=detect_leaks=1 ./a.out
>>
Run Code Online (Sandbox Code Playgroud)

我错过了一个很好的环境变量吗?有人曾经使用gcc吗?

编辑:这适用于例如:

g++ -fsanitize=address main.cpp …
Run Code Online (Sandbox Code Playgroud)

g++ memory-leak-detector

6
推荐指数
1
解决办法
2万
查看次数

如何在java中找到匿名类的GC根?

就在今天,我在我的应用程序中发现内存泄漏,其中大量对象被创建为匿名类.这是一个经典的例子,每个对象都有自己的类定义并放入堆中.

在运行时找到内存分析器并且Eclipse Memory Analyzer完成的堆转储分析也没有用.

我想知道如何使用线程id(或至少父类加载器)记录在运行时创建的所有匿名类.

我认为单独这件事会让找到根本原因变得微不足道.

java garbage-collection memory-leaks classloader memory-leak-detector

6
推荐指数
1
解决办法
285
查看次数

有谁能够在使用共享DLL的Windows 64位应用程序上集成tcmalloc?

我有一个要与tcmalloc集成的64位Visual Studio 2010(单线程)C ++ Windows应用程序,使用任何动态链接的dll时都遇到问题。我将tcmalloc链接为静态库。tcmalloc可以很好地工作,直到应用程序开始使用我们共享的dll之一。我将解决方案构建为64位DEBUG应用程序。dll的所有链接都与CRT库的C / C ++调试版本(MSVCP100D.dll和MVCR100D.dll)链接。

以下是失败代码的示例。将为所有内存分配调用tcmalloc,但是调用delete时,应用程序崩溃。当我在主可执行文件中创建函数并将代码复制到那里时,完全相同的代码可以正常工作,这让我感到非常困惑。

如果有人在这种情况下使用tcmalloc有任何经验,我将感谢您的反馈。这对我来说是个谜。dll的内存模型问题(不同的堆??)吗?我不知道。在我看来,他们正在使用同一堆。

抱歉,如果这篇文章太长。我试图提供尽可能多的信息。

谢谢。

布鲁斯

更新:作为测试,我将崩溃的共享dll更改为静态库,并且一切正常,直到应用程序使用其他dll。因此,无论出于何种原因,tcmalloc都需要一些其他步骤来处理共享的dll。我可以使用tcmalloc来制作所有dll的静态库以进行内存分析,但是,知道将tdllalloc与共享dll一起使用还需要做些什么,这真的很高兴。

DLL标头文件方法声明:__declspec(dllexport)static std :: string GetExecutablePath();

//.cpp实现

string Parameters::GetExecutablePath()

    string  execPathStr;
    char exeFilePath[ MAX_PATH +1];
    if ( GetModuleFileName( NULL, exeFilePath, MAX_PATH ) )
    {
        //The line of code below is where the app crashes.
        //It calls operator new in crt/src/new.cpp. I verified the call to malloc
        //is forwarded to tcmalloc. 
        *execPathStr = string(exeFilePath);* //creates and deletes a temporary and then crashes

        long dir_pos = execPathStr.rfind( FT_DIR_SLASH ) …
Run Code Online (Sandbox Code Playgroud)

c++ tcmalloc memory-leak-detector

5
推荐指数
1
解决办法
4166
查看次数