Articles of 内存泄漏

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

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

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

我有一个进程(每次都由一个看门狗启动,因为某种原因停止了),通常使用大约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 请指教。

有没有一个很好的Valgrind替代Windows?

我正在调查Valgrind,以帮助改进我的C编码/debugging,当我发现它只用于Linux – 我没有其他需要或兴趣将我的操作系统移到Linux,所以我想知道是否有一个同样好的Windows程序。

gtk_widget_queue_draw中,Windows 7下的内存泄漏

以下GTK程序: #include <gtk/gtk.h> GtkVBox *vbox; GtkWindow *win; gboolean Timer (gpointer user_data) { gtk_widget_queue_draw (GTK_WIDGET (vbox)); return 1; } int main(int argc, char **argv) { gtk_init(&argc, &argv); win = (GtkWindow*)gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = (GtkVBox*)gtk_vbox_new(TRUE, 1); gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(vbox)); g_timeout_add (200, Timer, 0); gtk_widget_show_all(GTK_WIDGET(win)); gtk_main(); return 0; } 在任务pipe理器显示的使用gcc 4.5.2编译的Windows 7 64位下泄漏。 它在Windows XP 32位下编译时不会泄漏。 该程序什么都不做。 它创build一个窗口,放在那里有一个盒子,然后从一个定时器每个200ms调用gtk_widget_queue_draw。 这是一个batch file来编译和链接testing。 […]

如何正确地取消初始化OpenSSL

在我的OpenSSL客户端中,我遇到了这样的问题,即当我select静态链接libeay32和ssleay32而不是dynamic时,我从Visual Leak Detector中得到了大量的内存泄漏错误。 我在这个线程中复制了来自OP的命令,但是我还剩下6个。 然后我添加了sk_SSL_COMP_free(SSL_COMP_get_compression_methods()); 就像4LegsDrivenCat在同一个线程中所build议的一样,剩下的只剩下4个了,所有这些显然都与加载一个我用来比较服务器证书的可信证书有关。 我使用Visual Studio 2013 Express,OpenSSL 1.0.1L(32和64位),VLD 2.4RC2和我的电脑是Windows 7 64位。 下面的callstack是安全模式下VLD的64位。 在32位VLD崩溃在安全模式(虽然它在快速模式下工作,但不会产生一个像样的调用堆栈)。 我删除了引用我自己的函数以及hex数据的callstack部分。 Visual Leak Detector Version 2.4RC2 installed. WARNING: Visual Leak Detector detected memory leaks! ———- Block 5671 at 0x000000000097E9B0: 180 bytes ———- Leak Hash: 0xA14DA3AA, Count: 1, Total 180 bytes Call Stack (TID 7088): 0x000000007746FAC0 (File and line number […]

分离pthreads和内存泄漏

有人可以请向我解释为什么这个简单的代码泄漏内存? 我相信由于pthreads是以分离状态创build的,所以它们的资源在终止后应该被中介释放,但事实并非如此。 我的环境是Qt5.2。 #include <QCoreApplication> #include <windows.h> void *threadFunc( void *arg ) { printf("#"); pthread_exit(NULL); } int main() { pthread_t thread; pthread_attr_t attr; while(1) { printf("\nStarting threads…\n"); for(int idx=0;idx<100;idx++) { pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create( &thread, &attr, &threadFunc, NULL); pthread_attr_destroy ( &attr ); } printf("\nSleeping 10 seconds…\n"); Sleep(10000); } } 更新: 我发现,如果我在for循环内添加一个5毫秒的延迟,泄漏就会变慢。 for(int idx=0;idx<100;idx++) { pthread_attr_init(&attr); […]

OpenSSL :: SSL_library_init()内存泄漏

最近我开始研究C ++中的内存泄漏问题,所以我可能会问一个天真的问题。 我有一个使用OpenSSL的c ++库 – 我的任务是检查这个库中是否有内存泄漏。 我已经运行了Visual Leak Detector来检查内存泄漏。 我看到调用SSL_library_init(); 和SSL_load_error_strings(); 是领先的泄漏 – 快速searchGoogle显示,在使用的最后,我不得不呼吁以下: CONF_modules_free(); ERR_remove_state(0); ENGINE_cleanup(); CONF_modules_unload(1); ERR_free_strings(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); 泄漏确实减less了,但仍然有两个泄漏(VLD工具显示我)因为SSL_library_init调用而发生SSL_library_init 。 有谁知道还有什么我必须做的,以释放所有的内存泄漏?

本机内存泄漏 – 如何find分配源的调用堆栈

基于!address -summary命令的以下输出,我认为我有一个本机内存泄漏。 为了抑制这些分配正在发生的地方,我在下面的文章http://www.codeproject.com/KB/cpp/MemoryLeak.aspx 0:000> !address -summary TEB 7efdd000 in range 7efdb000 7efde000 TEB 7efda000 in range 7efd8000 7efdb000 TEB 7efd7000 in range 7efd5000 7efd8000 TEB 7efaf000 in range 7efad000 7efb0000 TEB 7efac000 in range 7efaa000 7efad000 ProcessParametrs 00441b78 in range 00440000 00540000 Environment 004407f0 in range 00440000 00540000 ——————– Usage SUMMARY ————————– TotSize ( KB) […]