Tcmalloc工具定位内存泄漏问题

内存泄漏问题定位

gperftools工具安装

执行如下操作:

git clone https://github.com/gperftools/gperftools.git
注:如果网速较慢,可直接去下载压缩包。
如我下载的地址:https://github.com/gperftools/gperftools/releases/tag/gperftools-2.15
tar -zxvf gperftools-2.15.tar.gz
cd gperftools-2.15/
./configure
编译:
make -j8
安装:
sudo make install注:查看pprof安装路径
lx@lx-virtual-machine:~/tcmalloc/gperftools-2.15$ ls /usr/local/bin/pprof*
/usr/local/bin/pprof  /usr/local/bin/pprof-symbolize注:查看tcmalloc库安装路径
lx@lx-virtual-machine:~/tcmalloc/gperftools-2.15$ ls /usr/local/lib/libtcmalloc*
/usr/local/lib/libtcmalloc.a                       /usr/local/lib/libtcmalloc_minimal_debug.a
/usr/local/lib/libtcmalloc_and_profiler.a          /usr/local/lib/libtcmalloc_minimal_debug.la
/usr/local/lib/libtcmalloc_and_profiler.la         /usr/local/lib/libtcmalloc_minimal_debug.so
/usr/local/lib/libtcmalloc_and_profiler.so         /usr/local/lib/libtcmalloc_minimal_debug.so.4
/usr/local/lib/libtcmalloc_and_profiler.so.4       /usr/local/lib/libtcmalloc_minimal_debug.so.4.5.16
/usr/local/lib/libtcmalloc_and_profiler.so.4.6.11  /usr/local/lib/libtcmalloc_minimal.la
/usr/local/lib/libtcmalloc_debug.a                 /usr/local/lib/libtcmalloc_minimal.so
/usr/local/lib/libtcmalloc_debug.la                /usr/local/lib/libtcmalloc_minimal.so.4
/usr/local/lib/libtcmalloc_debug.so                /usr/local/lib/libtcmalloc_minimal.so.4.5.16
/usr/local/lib/libtcmalloc_debug.so.4              /usr/local/lib/libtcmalloc.so
/usr/local/lib/libtcmalloc_debug.so.4.5.16         /usr/local/lib/libtcmalloc.so.4
/usr/local/lib/libtcmalloc.la                      /usr/local/lib/libtcmalloc.so.4.5.16
/usr/local/lib/libtcmalloc_minimal.a

刷新动态库:

sudo ldconfig

pprof命令测试:

pprof

注:如果出现命令选项即正确安装成功
在这里插入图片描述

Tcmalloc工具测试

测试程序如下

 1 #include <stdio.h>2 #include <stdlib.h>3 4 void func_malloc(char* ch)5 {6         ch = (char *)malloc(sizeof(char));7         return ;8 }9 10 int main()11 {12         printf("hello world!\n");13 14         char* ch = NULL;15         func_malloc(ch);16         printf("ch-addr:%p\n", &ch);17         //free(ch);18 19         return 0;20 }

执行如下操作进行测试:

lx@lx-virtual-machine:~/tcmalloc$ gcc main.c -g
lx@lx-virtual-machine:~/tcmalloc$ 
lx@lx-virtual-machine:~/tcmalloc$ 
lx@lx-virtual-machine:~/tcmalloc$ ./a.out 
hello world!
ch-addr:0x7ffd2f8b1cc0
lx@lx-virtual-machine:~/tcmalloc$ LD_PRELOAD=/usr/local/lib/libtcmalloc.so HEAPCHECK=normal ./a.out 
No live heap object at 0x7fb1c907a890 to ignore
WARNING: Perftools heap leak checker is active -- Performance may suffer
hello world!
ch-addr:0x7ffcab46fd80
Have memory regions w/o callers: might report false leaks
Leak check _main_ detected leaks of 1 bytes in 1 objects
The 1 largest leaks:
*** WARNING: Cannot convert addresses to symbols in output below.
*** Reason: Cannot find 'pprof' (is PPROF_PATH set correctly?)
*** If you cannot fix this, try running pprof directly.
Leak of 1 bytes in 1 objects allocated from:@ 556bf2d04750 @ 556bf2d0478e @ 7fb1c88b4c87 @ 556bf2d0465a If the preceding stack traces are not enough to find the leaks, try running THIS shell command:pprof ./a.out "/tmp/a.out.56397._main_-end.heap" --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10 --gvIf you are still puzzled about why the leaks are there, try rerunning this program with HEAP_CHECK_TEST_POINTER_ALIGNMENT=1 and/or with HEAP_CHECK_MAX_POINTER_OFFSET=-1
If the leak report occurs in a small fraction of runs, try running with TCMALLOC_MAX_FREE_QUEUE_SIZE of few hundred MB or with TCMALLOC_RECLAIM_MEMORY=false, it might help find leaks more repeatab
Exiting with error code (instead of crashing) because of whole-program memory leakslx@lx-virtual-machine:~/tcmalloc$ pprof ./a.out "/tmp/a.out.56397._main_-end.heap" --lines --text --stack
Using local file ./a.out.
Using local file /tmp/a.out.56397._main_-end.heap.
Total: 0.0 MB
Stacks:1        (0000556bf2d04750) /home/lx/tcmalloc/main.c:6:func_malloc(0000556bf2d0478d) /home/lx/tcmalloc/main.c:15:main(00007fb1c88b4c86) /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:310:__libc_start_main(0000556bf2d04659) ??:0:_startLeak of 1 bytes in 1 objects allocated from:@ 556bf2d04750 unknown@ 0000556bf2d0478d main /home/lx/tcmalloc/main.c:15@ 00007fb1c88b4c86 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:310@ 0000556bf2d04659 _start ??:00.0 100.0% 100.0%      0.0 100.0% func_malloc /home/lx/tcmalloc/main.c:60.0   0.0% 100.0%      0.0 100.0% __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:3100.0   0.0% 100.0%      0.0 100.0% _start ??:00.0   0.0% 100.0%      0.0 100.0% main /home/lx/tcmalloc/main.c:15

对比分析测试结果:
在这里插入图片描述

参考

https://blog.csdn.net/fpcc/article/details/136573180
https://qiushao.net/2020/07/11/Linux/memory-leak-analyze-tcmalloc/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索Python自动化测试:Pytest与Unittest框架详解

摘要&#xff1a; 在软件开发过程中&#xff0c;自动化测试是确保代码质量和提高开发效率的关键环节。Python作为一门广泛使用的编程语言&#xff0c;提供了多种自动化测试工具。本文详细介绍了Python中两个主流的测试框架&#xff1a;Pytest和Unittest。文章首先概述了Pytest的…

JAVA高级进阶14设计模板

第十四天、设计模板 什么是设计模板&#xff08;Design pattern&#xff09; ? 一个问题通常有n种解法&#xff0c;其中肯定有一种解法是最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式 设计模式有20多种&#xff0c;对应20多种软件开发中会遇到…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS&#xff0c;取得下行时钟同步&#xff0c;并获取小区的PCI&#xff1b;如果失败则转步骤1搜索下一个频点&#xff1b;否则继续后续步骤&#xff1b; 3.解析Mib&#xff0c;…

WDG看门狗

1 WDG 1.1 简介 WDG是看门狗定时器&#xff08;Watchdog Timer&#xff09;的缩写&#xff0c;它是一种用于计算机和嵌入式系统中的定时器&#xff0c;用来检测和恢复系统故障。 看门狗就像是一个忠诚的宠物狗&#xff0c;它时刻盯着你的程序&#xff0c;确保它们正常运行。…

SpringBoot启动出错:无法访问org.springframework.boot.autoconfigure.SpringBootApplication

无法访问org.springframework.boot.autoconfigure.SpringBootApplication类文件具有错误的版本 61.0&#xff0c;应为 52.0请删除该文件或确保该文件位于正确的类路径子目录中。 出现该问题是由于版本不兼容&#xff0c; 在pom.xml文件中&#xff0c;修改版本为2开头即可

一个用于Win的自动复制文本的工具:Auto_Copy

自动复制工具 这是一个用在 Windows 上的的小工具,会将你选中的任何文本保存下来,可以通过点击右键粘贴选中内容。 一、灵感来源: 在使用Mobaxterm时,我注意到其软件中具备选中即自动复制和右键直接粘贴的功能。但是,这种选中自动复制的功能仅在软件内部有效。由于这一功…

【wsl2】工作在nat模式安装miniconda

刚好当前是root 用户这里wsl说自己nat模式,不用系统代理 wsl: A localhost proxy configuration was detected but not mirrored into WSL. WSL in NAT mode does not support localhost proxies. Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.153.1-microsoft-standard-W…

数字图像处理之【高斯金字塔】与【拉普拉斯金字塔】

数字图像处理之【高斯金字塔】与【拉普拉斯金字塔】 1.1 什么是高斯金字塔&#xff1f; 高斯金字塔&#xff08;Gaussian Pyramid&#xff09;是一种多分辨率图像表示方法&#xff0c;用于图像处理和计算机视觉领域。它通过对原始图像进行一系列的高斯平滑和下采样操作&#x…

最新docker仓库镜像

目前下面的docker仓库镜像源还能使用。 vi /etc/docker/daemon.json添加如下配置{"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu&…

RTMP推流到SRS流媒体服务器消息处理

RTMP推流到SRS流媒体服务器消息处理 SRS和客户端是怎么交换消息的&#xff1f;各个消息有什么作用&#xff1f;握手成功后&#xff0c;SRS和客户端进行消息交换&#xff0c;对应wiresharek这部分截图&#xff1a; 流程图&#xff08;之前画的&#xff0c;可能不够详细&#xf…

IPC进程通信:QNX

引言 在现代操作系统中&#xff0c;进程间通信&#xff08;IPC&#xff09;机制是实现进程间数据交换和同步的关键技术。IPC允许多个进程共享信息和资源&#xff0c;从而协同工作完成复杂任务。在QNX Neutrino系统中&#xff0c;IPC尤为重要&#xff0c;因为QNX主要面向实时系…

在Linux (Ubuntu 16) 下安装LabVIEW

用户尝试在Ubuntu 16操作系统上安装LabVIEW&#xff0c;但找不到合适的安装文件来支持Ubuntu。已经下载了运行时文件&#xff0c;并尝试将.rpm包转换为.deb包并安装在Ubuntu上。然而&#xff0c;安装完成后&#xff0c;没有在应用程序中看到LabVIEW的图标。 用户希望能够在Ubu…

【操作系统】内存管理——页面分配策略(个人笔记)

学习日期&#xff1a;2024.6.28 内容摘要&#xff1a;页面分配策略和内存映射文件&#xff0c;内存映射文件 页面分配置换策略 基本概念 驻留集&#xff0c;指请求分页存储管理中给进程分配的物理块的集合&#xff0c;在采用了虚拟存储技术的系统中&#xff0c;驻留集大小一…

springcloud第4季 分布式事务seata实现AT模式案例2【经典案例】

一 seata案例 1.1 背景说明 本案例使用seata的at模式&#xff0c;模拟分布式事务场景&#xff1a;【下订单&#xff0c;减库存&#xff0c;扣余额&#xff0c;改状态】 AT模式原理&#xff1a;是2pc方案的演变&#xff0c; 一阶段&#xff1a;业务数据和回滚日志记录在同一…

力扣第217题“存在重复元素”

在本篇文章中&#xff0c;我们将详细解读力扣第217题“存在重复元素”。通过学习本篇文章&#xff0c;读者将掌握如何使用哈希表和排序方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力…

Android studio 打包低版本的Android项目报错

一、报错内容 Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade> com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "…

static修饰的对象在内存中的存储及其用法

一、static修饰的变量在内存中的存储位置 static关键字无论是在C语言还是C中都有着极其重要的作用&#xff0c;那么对于static来说&#xff0c;它修饰的对象是存储在内存的哪个位置呢&#xff1f;它的作用与它在内存中的位置有什么联系&#xff1f;还有它都适用于哪些场景&…

15.数据库简介+MySQl使用+SQL语句

文章目录 数据库简述一.数据库简介DB1.定义:2.DBMS数据库管理系统3.数据库分类 二.MySQL的安装1.安装步骤2.MySQL数据库图形管理工具3.mysql程序常用命令4.MySQL字符集及字符序5.Navicat快捷键操作 三.MySQL数据库基本操作 .........................................表管理一.…

RPC远程过程调用--Thrift

RPC远程过程调用–Thrift 简介 Thrift是一个由Facebook开发的轻量级、跨语言的远程服务调用框架&#xff0c;后进入Apache开源项目。支持通过自身接口定义语言IDL定义RPC接口和数据类型&#xff0c;然后通过编译器生成不同语言代码&#xff0c;用于构建抽象易用、可互操作的R…

黄子韬揭秘徐艺洋与EXO的不解之缘

黄子韬揭秘&#xff1a;徐艺洋与EXO的不解之缘在娱乐圈的繁华与喧嚣中&#xff0c;总有一些不为人知的故事&#xff0c;它们或温馨、或励志&#xff0c;或是感叹命运的奇妙。近日&#xff0c;黄子韬在一档热门综艺节目中意外爆料&#xff0c;揭开了徐艺洋与EXO之间鲜为人知的秘…