Articles of 内存泄漏

关心使用共享内存与CreateFileMapping和MapViewofFile

我有2个关于使用共享内存的问题。 我正在使用CreateFileMapping在两个进程之间创build共享内存区域。 1)我知道我需要调用CreateFileMapping或OpenFileMapping调用返回的每个句柄的CloseHandle来释放内存。 我的问题是,如果使用共享内存的程序在不调用CloseHandle的情况下退出,那么所有的句柄都会被适当的closures,而mem被Windows XP / 7解除分配? IE浏览器 – 所有使用内存的进程closures后,是否有可能发生内存泄漏? 2)我使用MapViewofFile获取指向mem的指针。 在一个实例中,我假设共享内存将始终存在于方法的上下文中。 所以我将MapViewOfFile的返回值保存为一个指针,并closures了mem的句柄,并使用指向共享mem的指针(但仍然locking对它的访问)。 这是安全的,还是我应该每次访问共享内存调用MapViewOfFile? 谢谢, 伊恩

Linux中C ++应用程序的内存稳定性

我想validation我为Linux编写和编译的C ++应用程序的内存稳定性。 这是一个networking应用程序,以每秒10-20个连接的速度响应远程客户端连接。 从长远来看,内存是上升到50MB,尽pipe该应用程序正在打电话删除… 调查显示,Linux不会立即释放内存。 所以这是我的问题: 如何强制Linux释放我实际释放的内存? 至less我想这样做一次来validation内存的稳定性。 否则,有没有可靠的内存指示器可以报告内存我的应用程序实际上是持有?

检查正在运行的程序中的内存泄漏

出于对检查内存泄漏的好奇心,我有个疑问。 作为一个在过去的一两年中经常使用valgrind来检查代码中的内存泄漏的人,我突然想到在程序生命周期之后 ,它只能检测到丢失/未logging的内存。 所以,有鉴于此,我在想,如果你有一个长期运行的程序, malloc()是间歇性的,在应用程序退出之前不会free() ,那么潜在的吃内存(不一定是通过泄漏 )是巨大的,使用这些工具是不可观察的,因为他们只检查程序的生命周期。 是否有类似GDB的工具可以在运行时停止应用程序,并检查在应用程序生命周期中是否被引用的内存?

在linux下运行Drupal时出现内存泄漏apache,但同样的应用程序不会在windows服务器上泄漏mem

目前我的网站使用的是drupal 6,apache的http使用的是prefork mpm。 当我testing我的Web应用程序时,内存不会释放,它只是增加了内存使用量。 但是,在Windows上,它使用mpm_winnt.c,它工作得很好,没有内存泄漏。 如果我将其更改为在我的Linux服务器上使用worker.c,它会工作吗?

alsa – mem泄漏?

我一直在追逐内存泄漏(由'valgrind –leak-check = yes'报告),它似乎来自ALSA。 这段代码已经有一段时间在自由的世界里了,所以我猜这是我做错了。 #include <stdio.h> #include <stdlib.h> #include <alsa/asoundlib.h> int main (int argc, char *argv[]) { snd_ctl_t *handle; int err = snd_ctl_open( &handle, "hw:1", 0 ); printf( "snd_ctl_open: %d\n", err ); err = snd_ctl_close(handle); printf( "snd_ctl_close: %d\n", err ); } 输出如下所示: [root@aeolus alsa]# valgrind –leak-check=yes ./test2 ==16296== Memcheck, a memory error detector ==16296== […]

Ubuntu System Monitor和valgrind在C ++应用程序中发现内存泄漏

我用C ++编写了一个应用程序,它使用了一些外部的开源库。 我试图看看Ubuntu系统监视器有关于我的过程如何使用资源的信息,我注意到驻留内存继续增加到非常大的值(超过100MiB)。 这个应用程序应该在embedded式设备上运行,所以我必须小心。 我开始认为应该有(一些)内存泄漏,所以我使用valgrind。 不幸的是,似乎valgrind没有报告显着的内存泄漏,只有我使用的库中的一些小问题,仅此而已。 那么,我是否必须得出结论:我的algorithm真的使用了那么多的内存? 对我来说这似乎很奇怪…或者,我误解了系统监视器列的含义? 在与软件分析相关的时候,有人能澄清系统监视器中“虚拟内存”,“驻留内存”,“可写内存”和“内存”的含义吗? 我应该期望这些值能够立即表示我的进程在RAM中占用了多less内存? 在过去,我使用了能够告诉我在哪里使用内存的工具,比如Apple Profiling Tools。 有什么类似的我可以在Linux中使用? 谢谢!

JVM进程如何分配内存?

在理解JVM进程如何分配自己的内存方面,我有一点空隙。 我所知道的 RSS = Heap size + MetaSpace + OffHeap size OffHeap由线程堆栈,直接缓冲区,映射文件(库和jar)和JVM代码本身组成; 目前我正试图分析我的Java应用程序(Spring Boot + Infinispan),RSS是779M (它运行在docker容器中,所以pid 1可以): [ root@daf5a5ae9bb7:/data ]$ ps -o rss,vsz,sz 1 RSS VSZ SZ 798324 6242160 1560540 根据jvisualvm ,承诺的堆大小是374M Metasapce大小是89M 换句话说,我想解释799M – (374M + 89M)= 316M的OffHeap内存。 我的应用程序(平均)有36个活线程 。 每个线程消耗1M: [ root@fac6d0dfbbb4:/data ]$ java -XX:+PrintFlagsFinal -version |grep ThreadStackSize intx CompilerThreadStackSize = 0 […]

Linux和内存泄漏

Linux会立即自动重新申请应用程序使用的所有内存吗? 如果是这样的话,应用程序真的会在退出之前释放所有内存吗? 在调用exit(0)之前调用multithreading应用程序中每个类的析构函数是否真的值得? 如果Linux总是立即重新声明应用程序使用的所有内存,那么内存泄漏只是应用程序创build的悬挂指针,也只是它的生命周期。

如果/何时取消分配的堆内存得到回收?

我一直在embedded式Linux系统上运行一夜的内存testing。 使用vmstat我已经观察到,随着时间的推移,空闲内存会稳步下降。 根据procfs中的一些分析,一个进程的堆栈大致以相同的速度增长。 我怀疑有内存泄漏,并在代码中发现了一些经常使用new和delete位置。 但是,我没有看到没有匹配delete调用的new调用。 我再次运行内存testing,今天早上通过以下调用清除了内存caching echo 3 > /proc/sys/vm/drop_caches vmstat中列出的可用内存下降到接近testing开始时的值。 内核是否定期回收未使用的堆页? 如果是这样,除了上面的那个,还有其他的时间呢? 空闲内存可能低于某个阈值时

我如何find哪个进程正在泄漏内存

我有一个系统(Ubuntu)与许多进程和一个(或多个)有内存泄漏。 有没有一种很好的方法来find泄漏的过程? 一些进程是JVM,有些则不是。 有些是本土的,有些是开源的。