Tcmalloc工具定位内存泄漏问题

news2025/1/21 7:22:57

内存泄漏问题定位

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 --gv

If 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 leaks

lx@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:_start

Leak 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 ??:0

     0.0 100.0% 100.0%      0.0 100.0% func_malloc /home/lx/tcmalloc/main.c:6
     0.0   0.0% 100.0%      0.0 100.0% __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:310
     0.0   0.0% 100.0%      0.0 100.0% _start ??:0
     0.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.coloradmin.cn/o/1880545.html

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

相关文章

Unity动画系统(1)

6.1 动画系统基础1-5_哔哩哔哩_bilibili 模型信息 Generic非人型 Configure 虚线圈可以没有&#xff0c;实线圈必须有&#xff0c;15个骨骼是必须的 p313 尾巴、翅膀属于非人型 p314 一般使用create from this model 游戏对象不再旋转 游戏对象不再发生位移 调整中心位置

八月份的护网行动如何参加?

护网行动背景 什么是“护网行动”&#xff1f; 指挥机构∶由公安机关统一组织的"网络安全实战攻防演习"。 护网分为两级演习∶公安部对总部&#xff0c;省厅对省级公司。 什么是“实战攻防演习” 每支队伍3-5 人组成&#xff0c;明确目标系统&#xff0c;不限制攻…

Class Constructors and Destructors (类的构造函数和析构函数)

Class Constructors and Destructors [类的构造函数和析构函数] 1. Declaring and Defining Constructors (声明和定义构造函数)2. Using Constructors (使用构造函数)3. Default Constructors (默认构造函数)4. Destructors (析构函数)5. Improving the Stock Class (改进 Sto…

使用 privacyIDEA 实现 Windows RDP 多因素认证 (MFA)

前言 在等保 2.0 标准中有要求: d&#xff09;应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别&#xff0c;且其中一种鉴别技术至少应使用密码技术来实现。 可以借助开源的 privacyIDEA 配合 AD 域环境实现 RDP MFA 认证登录以满足上面的要…

docker安装rocketMq5x以上的版本

1.背景 安装RocketMQ 5.x以上的版本主要是因为新版本引入了许多性能优化、新功能以及对已有特性的增强&#xff0c;这些改进可以帮助提升消息队列系统的稳定性和效率。 1.性能提升&#xff1a;RocketMQ 5.x版本通常包括了对消息处理速度、吞吐量和延迟的优化&#xff0c;使得系…

大模型压缩-LoRAP

这里写目录标题 1.多头注意力和FFN的权重分布2 多头矩阵的低秩分解FFN无梯度通道剪枝 这篇文章 1期望找到一个“剪枝&#xff0b;低秩分解”的路子&#xff0c;使结构化剪枝达到非结构化剪枝的性能。 1.多头注意力和FFN的权重分布 Fig. 1.1 多头注意力权重矩阵 从Fig.1.1可以看…

万字浅析视频搜索系统中的多模态能力建设

万字浅析视频搜索系统中的多模态能力建设 FesianXu 20240331 at Tencent WeChat search team 前言 视频搜索是天然的富媒体检索场景&#xff0c;视觉信息占据了视频的一大部分信息量&#xff0c;在视频搜索系统中引入多模态能力&#xff0c;对于提高整个系统的能力天花板至关重…

学习感悟丨在誉天学习数通HCIP怎么样

大家好&#xff0c;我是誉天学员的徐同学&#xff0c;学习的数通HCIP课程。 在学校的时候&#xff0c;听说下半年就要出去实习了&#xff0c;心中坎坷不安&#xff0c;现在我学到的知识远远不够的。然后就想着学点东西充实一下自己的知识面和专业能力&#xff0c;有一次和同学谈…

【STM32嵌入式系统设计与开发---传感器拓展】——1_4_标准库FreeRTOS移植实验

目录 雅俗理解源码下载链接知识拓展步骤1&#xff1a;stm32f103vet6移植freeRTOS步骤:&#xff08;1&#xff09;准备开发环境&#xff08;2&#xff09;添加FreeRTOS移植 致谢 雅俗理解 雅&#xff1a;FreeRTOS是一个开源的实时操作系统&#xff08;RTOS&#xff09;&#xf…

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

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

【例子】webpack 开发一个可以加载 markdown 文件的加载器 loader 案例

Loader 作为 Webpack 的核心机制&#xff0c;内部的工作原理却非常简单。接下来我们一起来开发一个自己的 Loader&#xff0c;通过这个开发过程再来深入了解 Loader 的工作原理。 这里我的需求是开发一个可以加载 markdown 文件的加载器&#xff0c;以便可以在代码中直接导入 m…

Pikachu靶场--Sql Inject

参考借鉴 pikachu靶场练习&#xff08;详细&#xff0c;完整&#xff0c;适合新手阅读&#xff09;-CSDN博客 数字型注入(post) 这种类型的SQL注入利用在用户输入处插入数值&#xff0c;而不是字符串。攻击者试图通过输入数字来修改SQL查询的逻辑&#xff0c;以执行恶意操作。…

前端笔记-day11

文章目录 01-空间-平移02-视距03-空间旋转Z轴04-空间旋转X轴05-空间旋转Y轴06-立体呈现07-案例-3D导航08-空间缩放10-动画实现步骤11-animation复合属性12-animation拆分写法13-案例-走马灯14-案例-精灵动画15-多组动画16-全民出游全民出游.htmlindex.css 01-空间-平移 <!D…

普元EOS学习笔记-创建精简应用

前言 本文依旧基于EOS8.3进行描述。 在上一篇文章《EOS8.3精简版安装》中&#xff0c;我们了解到普元预编译好的EOS的精简版压缩包&#xff0c;安装后&#xff0c;只能进行低开&#xff0c;而无法高开。 EOS精简版的高开方式是使用EOS开发工具提供的IDE&#xff0c;创建一个…

nginx架构学习

前言 这篇文章主要记录下对nginx架构的学习记录。 架构设计 优秀的模块化设计 高度模块化的设计是Nginx的架构基础。在Nginx中&#xff0c;除了少量的核心代码&#xff0c;其他一切皆 为模块。 在这5种模块中&#xff0c;配置模块与核心模块都是与Nginx框架密切相关的&…

【ESP32】打造全网最强esp-idf基础教程——14.VFS与SPIFFS文件系统

VFS与SPIFFS文件系统 这几天忙着搬砖&#xff0c;差点没时间更新博客了&#xff0c;所谓一日未脱贫&#xff0c;打工不能停&#xff0c;搬砖不狠&#xff0c;明天地位不稳呀。 不多说了&#xff0c;且看以下内容吧~ 一、VFS虚拟文件系统 先来看下文件系统的定义&#x…

zabbix监控进阶:如何分时段设置不同告警阈值(多阈值告警)

作者 乐维社区&#xff08;forum.lwops.cn&#xff09;乐乐 在生产环境中&#xff0c;企业的业务系统状态并不是一成不变的。在业务高峰时段&#xff0c;如节假日、促销活动或特定时间段&#xff0c;系统负载和用户访问量会大幅增加&#xff0c;此时可能需要设置更高的告警阈值…

网络基础:静态路由

静态路由是一种由网络管理员手动配置的路由方式&#xff0c;用于在网络设备&#xff08;如路由器或交换机&#xff09;之间传递数据包。与动态路由不同&#xff0c;静态路由不会根据网络状态的变化自动调整。 不同厂商的网络设备在静态路由的配置上有些许差异&#xff1b;下面…

qt文件如何打包成一个独立的exe文件

QT官方给我们安装好了打包软件&#xff0c;就在你QT安装的位置 把这个在cmd打开C:\Qt\6.7.1\mingw_64\bin\windeployqt6.exe&#xff08;或复制地址&#xff09; 然后把要打包项目的exe复制到新的空文件夹&#xff0c;再复制他的地址 按回车后生成新文件 再下载打包软件&#…

Arduino IDE 的安装与esp32项目的创建

1打开官网下载 官网 1-1下载完成后安装即可&#xff0c;会弹出一些按安装提示点击安装 2切换为中文模式 2-1点击Flie&#xff0c;在点击图中高亮的位置&#xff0c;进入 2-2选择语言 3创建esp32项目 3-1在线安装&#xff08;不一定成功&#xff0c;可以一直试&#xff09; …