为何bcc memleak无法检测到大量内存泄漏?求工具推荐
内存泄漏排查疑问:top显示内存暴涨但memleak仅检测到少量泄漏
问题描述
- 使用bcc-memleak定位项目内存泄漏问题,top命令显示10小时内进程虚拟内存(VIRT)从100GB增至200GB,物理内存(RES)从60GB增至100GB,但memleak仅检测到150MB未释放内存
- 已通过
-fno-omit-frame-pointer编译项目以保留完整帧指针,memleak几乎能获取到所有未释放内存的调用栈(参数-o 30000表示仅收集分配后超过30秒未释放的内存) - memleak执行命令:
memleak -p {pid} -o 30000 -T 10 20;使用jemalloc替代标准malloc时,额外添加参数-O /lib64/libjemalloc.so,两种内存分配器下检测结果一致 - 曾尝试jemalloc的prof功能,但该功能占用过多CPU和内存,无法持续运行;使用LeakSanitizer检测时,仅发现不足100MB的内存泄漏
更新信息
编译参数
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
环境信息
- memleak 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
疑问
如何获取更多关于内存异常增长的信息?或者有哪些更适合的内存泄漏检测工具推荐?
内容的提问来源于stack exchange,提问作者moore
相关产品推荐
相关产品推荐

