【发布时间】:2023-05-20 02:27:01
【问题描述】:
我有一个进程(每次都由看门狗启动,但由于某种原因停止了),通常使用大约 200MB 内存。一旦我看到它正在消耗内存 - 内存使用量约为 1.5-2GB,这绝对意味着某处的“内存泄漏”(引号中的“内存泄漏”,因为这不是真正的内存泄漏 - 就像分配的内存,从未释放 且无法访问 - 请注意,只使用智能指针。所以,我想到了一些巨大的容器(我没有找到)或类似的东西)
后来,由于内存使用率高,进程崩溃了,并且生成了一个核心转储 - 大约 2GB。但问题是,我无法重现这个问题,所以valgrind
在这里无济于事(我猜)。它很少发生,我无法“抓住”它。
所以,我的问题是 - 有没有办法使用 exe 和核心文件来定位进程的哪个部分使用了大部分内存?
我用gdb
看了一下core文件,没有什么异常。但是核心很大,所以肯定有东西。有没有聪明的方法来理解发生了什么,或者只是猜测可能会有所帮助(但是对于这么大的 exe..,12 个线程,大约 50-100 个(可能更多)类等)
这是一个C++
应用程序,在 RHEL5U3 上运行。
【问题讨论】:
-
考虑用你的 coredump 标签和 5 个关注者换取带有 xK 的 C++ 标签?追随者。祝你好运。
-
我想过这个,但我想知道它是否正确。我试试看:)
-
@Kiril Kirov -- 试试 --outofcore.com/2011/06/scripted-debug-using-gdb(我自己没试过,所以发表评论
-
@Jayan - 谢谢,我会的。
-
实际上,Valgrind 可以提供帮助。您将寻找未初始化变量的读取、空闲后读取等。类似的事情可能经常发生,尽管它很少会引发您的问题。
标签: c++ linux unix memory-leaks gdb