【发布时间】:2016-08-19 09:05:27
【问题描述】:
我正在使用 CentOS 7 并且正在运行 C++ 应用程序。最近,我切换到了应用程序用于各种 MySQL C API 函数的库的较新版本。但是在集成新库之后,我看到程序的内存使用量大幅增加,即如果运行超过一两天,应用程序就会崩溃。确切地说,应用程序的内存使用量开始增加,直至应用程序单独使用系统总内存的 74.9%,然后被系统强制关闭。
有什么方法可以跟踪整个应用程序的内存使用情况,包括静态变量。我已经尝试过 valgrind 的工具 Massif。
谁能告诉我内存使用量增加的可能原因或任何可以让我深入了解内存分配方式(静态和动态)的工具。有没有什么工具可以告诉我们在 linux 环境中运行的 C++ 应用程序的内存分配?
提前致谢!
【问题讨论】:
-
Valgrind 应该是分析这类问题的正确工具,这似乎是一个经典的内存泄漏。
-
@Torbjörn,我也检查了 valgrind,在运行时持续时间约为 10 分钟的情况下,用于执行应用程序的 HEAP 摘要部分中的内存分配差异约为 1 GB。
-
您还可以覆盖全局 new 运算符和 delete 运算符。我以前这样做是为了保留尚未删除的堆分配内存指针的缓存。然后是一个单独的线程,每隔几分钟打印一次该信息。
标签: c++ linux memory-leaks heap-memory mysql-connector