Articles of 内存泄漏

有没有一种方法来定位进程的哪一部分使用大部分内存,只查看生成的核心文件?

我有一个进程(每次都由一个看门狗启动,因为某种原因停止了),通常使用大约200MB的内存。 一旦我看到它正在吃掉内存 – 内存使用量约为1.5-2GB,这肯定意味着某处出现了“内存泄漏”(引用中的“内存泄漏”,因为这不是真正的内存泄漏 – 像分配的内存一样,从来没有释放过无法访问 – 请注意, 只有智能指针被使用 ,所以,我想一些巨大的容器(我没有find)或类似的东西) 后来,进程崩溃,因为内存使用率高,产生了一个核心转储 – 大约2GB。 但问题是,我不能重现这个问题,所以valgrind不会在这里帮助(我猜)。 这很less发生,我不能“抓住”它。 所以,我的问题是 – 有没有办法,使用EXE和核心文件,来定位进程的哪一部分,已经使用了大部分的内存? 我用gdb看了一下核心文件,没有什么不寻常的。 但核心是大的,所以一定有一些东西。 有一个聪明的方法来了解发生了什么,或者只有猜测可能有帮助(但对于这样的大EXE .. 12线程,大约50-100(可能更多)类等等) 这是一个在RHEL5U3上运行的C++应用程序。

OpenSSL函数EVP_EncryptFinal_ex中的内存泄漏

我基于这个教程实现了encryption过程: http://www.openssl.org/docs/crypto/EVP_EncryptInit.html# 当我运行它低谷valgring并得到以下报告: ==2371== 176 bytes in 1 blocks are still reachable in loss record 3 of 6 ==2371== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64- linux.so) ==2371== by 0x56CA133: CRYPTO_malloc (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0) ==2371== by 0x575280F: lh_new (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0) ==2371== by 0x5754D4F: ??? (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0) ==2371== by 0x575503E: ??? (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0) ==2371== by 0x5755A1D: ERR_get_state (in /lib/x86_64-linux-gnu/libcrypto.so.1.0.0) […]

/ proc / $ pid / maps显示x86_64 linux上没有rwx权限的页面

/proc/$pid/maps显示x86_64 linux上没有rwx权限的页面。 我注意到,当我读取/proc/$pid/maps在64位linux我有内存页面没有权限,但在一个32位的Linux,他们不在那里。 我试图监视我的过程的内存使用情况,但林困惑。 为什么有没有rwx特权的页面。 他们正在消耗我的记忆! 这是一个64位的Linux输出的“顶” % cat /proc/21367/maps 3154200000-315420d000 r-xp 00000000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 315420d000-315440d000 **—p** 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 315440d000-315440e000 rw-p 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so 请指教。

在Windows上使用软件包XML时发生内存泄漏

阅读内存泄漏在r (包括链接的post) parsingXML和这篇文章在R帮助,并考虑到一段时间了,我仍然认为这是一个未解决的问题值得关注,因为在整个R宇宙中广泛使用的XML包。 因此,请将此视为后续行动和/或参考,并提供一个有希望的信息,并简要说明问题 。 问题 parsingXML / HTML文档的方式可以使用XPath进行search,这需要内部使用C指针(AFAIU)。 至less在MS Windows(我在Windows 8.1,64位上运行)似乎这些引用没有被垃圾收集器正确识别。 因此消耗的内存没有被正确释放,导致R进程在某个时刻被冻结。 中央调查结果迄今 对我来说, XML:free和/或gc在通过xmlParse或htmlParseparsingXML / HTML文档时,并没有识别出涉及的所有内存,随后使用xpathApply或类似方法处理它们: 所报告的操作系统任务 (Rterm.exe)的内存使用量显着增加,而R进程的报告内存为“从R内部看”(函数memory.size )适度增加(相比之下)。 请参阅下面的大量parsing周期之前和之后的列表元素mem_r , mem_os和ratio 。 总而言之,抛出所有被推荐的东西( free , rm和gc ),当xmlParse等被调用时,内存使用率总是会增加。 这只是一个多less的问题。 因此恕我直言,那里一定还有一些工作不正常。 插图 我借用了Duncan的Omegahat git仓库的分析代码。 一些准备: Sys.setenv("LANGUAGE"="en") require("compiler") require("XML") > sessionInfo() R version 3.1.0 (2014-04-10) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 [3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C […]

我可以使用什么工具分析内存使用情况?

我有一个使用C ++使用Visual Studio 2008编写的Windows应用程序。我想要获得有关内存使用情况的统计信息,以查找有关内存使用情况的瓶颈和位置。 理想情况下,我想有一个工具,可以做到这一点,而不必进入并添加计数器/分析逻辑到代码本身。 基本上我正在寻找的是: 所有的分配清单(释放或不是重要的,我想知道每次分配的东西) 每个分配的调用堆栈和一个计数器,代表调用代码和分配内存的次数。 关于什么内存已被释放vs没有释放(查找泄漏)的信息。 理想情况下,它将足够智能,以确定内存是否仍在使用中,或者是否真的已经泄漏(通过示波器或其他智能机制)。 我不在乎它是否是免费的工具。 以下是我已经看过的一些工具: Rational PurifyPlus :老实说,我一直没有能够使用这个工具。 它返回了很多误报。 另外,它并没有给我在我上面的列表中的前两个项目,而是似乎只关注内存错误和泄漏。 Sysinternals VMMap :这个工具很有趣,可以让我看看内存是如何分布的(堆栈vs堆vs共享堆等)。 它也让我看到分配的调用树,但不是很直观或有帮助。 数据很难理解。 DevPartner Boundschecker :我真的认为这是迄今为止最无用的工具。 多年以前,我在用DevPartner买下它之前就使用了它,我记得它工作得更好。 但它并不真正给我所需要的统计数据,也不能正确地检测内存泄漏。 我提前感谢任何帮助/build议。 我的应用程序是一个服务器,在压力testing过程中随着时间的推移会遭受严重的内存增长问题(并且由于虚拟字节超过了32位应用程序的限制而最终崩溃)。 有合适的工具将帮助我隔离我们正在分配内存,也可能会泄漏内存。

Windows下的GNU C / C ++内存泄漏检测

哪些内存泄漏检测工具可用于Windows上的开源C / C ++?

调查内存泄漏

我们在应用程序中有一个缓慢的内存泄漏,我已经通过以下步骤来分析泄漏的原因: 在GFlags中启用用户模式堆栈跟踪数据库 在Windbg中,键入以下命令: !heap -stat -h 1250000 (其中, 1250000是具有泄漏的堆的地址)比较多个转储后,我看到大小为0xC的存储器块随着时间而增加,内存泄漏。 input以下命令: !heap -flt sc给出UserPtr的这些分配,最后: 在这些地址上inputheap -p -a地址总是显示下面的分配调用堆栈: 0:000> !堆-p -a 10576ef8 address 10576ef8 found in _HEAP @ 1250000 HEAP_ENTRY Size Prev Flags UserPtr UserSize – state 10576ed0 000a 0000 [03] 10576ef8 0000c – (busy) mscoreei!CLRRuntimeInfoImpl::`vftable' 7c94b244 ntdll!RtlAllocateHeapSlowly+0x00000044 7c919c0c ntdll!RtlAllocateHeap+0x00000e64 603b14a4 mscoreei!UtilExecutionEngine::ClrHeapAlloc+0x00000014 603b14cb mscoreei!ClrHeapAlloc+0x00000023 603b14f7 mscoreei!ClrAllocInProcessHeapBootstrap+0x0000002e 603b1614 […]

工作集和提交大小有什么区别?

在debuggingOOM错误时,工作集和提交大小有什么区别? 特别是提交大小的确切含义是什么?

C ++(窗口)中的分配号码及其预测性

我正在使用_CrtDumpMemoryLeaks来识别我们的软件中的内存泄漏。 我们在multithreading应用程序中使用第三方库。 这个库确实有内存泄漏,因此在我们的testing中,我们要识别那些我们没有任何控制权的内容。 我们使用持续集成,所以新的function/algorithm/错误修复一直在增加。 所以问题是 – 是否有一个安全的方法来识别那些是我们的泄漏和那些是第三方库。 我们虽然关于使用分配号码,但是安全吗?

windbg的“!heap -h”输出中的“Internal”是什么意思?

我正在关注这个stackoverflow文章“!堆-flt -s xxxx”windbg命令中的不同列表示什么 我正在试图了解打印出来的信息,这些信息占用了大量的内存。 我可以理解大部分专栏,但在我的windbg上,我看到了一个额外的专栏。 我的大多数条目都标记为“ 内部” 。 我想知道这是什么意思。 我已经完成!gflags +ust 。 所以,我可以看到调用栈进行内存分配。 除了标记为“ 内部 ”的项目之外,我可以在大部分项目上执行此操作。 内部是什么意思? 这与LFH的实施有关吗? 如果这是LFH的内部实现,这些内部堆条目将如何以及何时返回到空闲列表? 现在没有任何理由让我记忆犹新。 这里是!heap -h 0000000002330000的输出供您参考。 Index Address Name Debugging options enabled 8: 02330000 Segment at 0000000002330000 to 0000000002340000 (00010000 bytes committed) Segment at 00000000032b0000 to 00000000033b0000 (00100000 bytes committed) Segment at 00000000065a0000 to 00000000067a0000 (00200000 bytes committed) […]