为什么 BCC Memleak 会丢失 malloc 信息

why does bcc memleak lose malloc information

提问人:moore 提问时间:2/22/2023 最后编辑:moore 更新时间:2/23/2023 访问量:159

问:

我正在使用 bcc-memleak 来定位项目中的内存泄漏。但 top 命令显示 VIRT 在 100 小时内从 100GB 增加到 200GB,RES 从 60GB 增加到 100GB,而 memleak 显示只有 150MB 内存没有释放。

我编译了项目以保持全帧指针,并且我几乎每个调用堆栈都具有出色的分配。(-o 3000 表示仅收集超过 30 年代的内存)-fno-omit-frame-pointer

memleak 命令是(当用 jemalloc 替换 malloc 时,添加memleak -p {pid} -o 30000 -T 10 20-O /lib64/libjemalloc.so)

使用 std malloc 和 jemalloc 具有相同的结果。

有人知道如何获取更多信息吗?或其他工具建议检查 Memleak。

我和教授一起尝试过 jemalloc,但它需要太多的 cpu 和内存,所以它没有解决我的问题。也尝试了 LeakSanitizer,但结果仍然只有不到 100MB 的内存泄漏。

BCC & Memleak 项目:https://github.com/iovisor/bcc/blob/master/tools/memleak.py

更新1:

CPPFLAGS=-O2 -Werror=return-type -Werror=uninitialized -fno-omit-frame-pointer -std=c++11 -mavx2 -mf16c

LIBADD=-lhiredis -lworkflow -lopenblas -lpugixml -lboost_regex -lboost_system -discovery -lmemcached -loffdb -lz -llzo2 -lprotobuf -lresolv -lpthread -lfmt -lACE

环境:

  • 忆密 v0.24.0
  • gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)
  • CentOS Linux 8.2 操作系统
  • 内核:Linux 4.18.0-193.28.1.el8_2.x86_64
C++ C++11 内存泄漏 malloc jemalloc

评论

0赞 Eljay 2/22/2023
top显示操作系统的内存量。brksbrk
0赞 Marek R 2/22/2023
标准库的堆管理是一件复杂的事情。当您在程序中释放内存时,并不意味着它会立即返回到操作系统(这是 TOP 看到的)。
0赞 Marek R 2/22/2023
您应该提供完整的配置:操作系统名称及其版本、编译器及其版本、所有构建标志......
0赞 Community 2/23/2023
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。
0赞 moore 2/23/2023
感谢您指出我的问题,我稍后会添加详细信息:)

答: 暂无答案