使用jemalloc检测内存泄露

2023-05-16

一、安装jemalloc

1.1、下载源码

wget https://github.com/jemalloc/jemalloc/archive/refs/tags/5.3.0.tar.gz

1.2、解压源码包

tar -zxv -f 5.3.0.tar.gz

1.3、编译并安装

cd jemalloc-5.3.0
./autogen.sh 在这个文件里面加上-configure后面-enable-prof参数
sudo make
sudo make install

由于要生成jeprof工具,所以要在autogen.sh文件中-configure后面-enable-prof参数

#!/bin/sh
#autogen.sh文件  
for i in autoconf; do
    echo "$i"
    $i
    if [ $? -ne 0 ]; then
        echo "Error $? in $i"
        exit 1
    fi
done

echo "./configure --enable-autogen $@"
./configure --enable-autogen --enable-prof $@ # 在这一行加
if [ $? -ne 0 ]; then
    echo "Error $? in ./configure"
    exit 1
fi

要在执行./autogen.sh之前加上

生成的jeprof工具在jemalloc-5.3.0/bin/文件夹中

二、程序启动准备

需要export两个环境变量,libjemalloc.so.2的绝对路径和jemalloc的参数

export LD_PRELOAD=“/usr/local/lib/libjemalloc.so.2”
export MALLOC_CONF=“prof_leak:true,lg_prof_sample:0,prof:true,prof_prefix:jeprof.out,prof_final:true,lg_prof_interval:30”

这里几个参数的含义分别为:

  • prof_leak:是否打开内存卸扣报告
  • lg_prof_sample:采样内存间隔,即每间隔分配多少内存启动一次采样
  • prof:这个参数在编译的时候就指定了
  • prof_prefix:采样文件名的前缀
  • prof_final:转储最终的内存使用情况
  • lg_prof_interval:每分配多少内存转储一次

更多参数的定义参见这里.

三、程序启动

会生成prof_prefix为前缀的heap文件,例如

jeprof.out.2381114.0.f.heap
jeprof.out.2381113.0.f.heap
jeprof.out.2381112.0.f.heap
jeprof.out.2380859.10.i10.heap
jeprof.out.2380859.11.i11.heap
jeprof.out.2380859.12.i12.heap
jeprof.out.2380859.13.i13.heap

3.1、生成svg

./jemalloc-5.3.0/bin/jeprof --show_bytes --svg ${服务二进制名} ${heap文件名} > out.svg

// 查看两个heap文件的diff
./jemalloc-5.3.0/bin/jeprof --show_bytes --svg 服务二进制名 − − b a s e = {服务二进制名} --base= 服务二进制名base={heap文件名} ${heap文件名} > diff.svg

如果生成svg时,报下面错误

/usr/bin/addr2line: DWARF error: could not find variable specification at offset 5fc4
/usr/bin/addr2line: DWARF error: could not find variable specification at offset 60c0
/usr/bin/addr2line: DWARF error: could not find variable specification at offset 6137

可以在编译的时候将-g换成-pg

生成的图,树上的每个节点代表一个函数,节点数据格式:

  • 函数名 或者 类名+方法名
  • 不包含内部函数调用的内存分配 (百分比)
  • of 包含内部函数调用的内存分配 (百分比) 如果没有内部调用函数则这一项数据不显示

一般程序不需要链接jemalloc源码,只用export LD_PRELOAD环境变量就行,如果有问题,可以将malloc改为jemalloc

cc_binary(
    name = "memory_leak",
    malloc = "@com_github_jemalloc//:jemalloc",
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用jemalloc检测内存泄露 的相关文章

  • 不用第三方软件 用DISM命令备份与还原win8系统

    分享一个来自远景论坛的的教程如何通过dism命令给自己的win8系统备份和如何通过dism命令还原系统 用 DISM 命令进行系统备份与还原不需要任何第三方软件 xff0c 是利用 Windows 7 Windows 8 系统自带的 DIS
  • ubuntu20.04+anaconda3+tensorflow-gpu2.1安装

    磁盘分区 WIN系统中 xff0c 右键我的电脑 管理 磁盘管理 xff0c 首先留给Ubuntu一定的空间 xff0c 这里为600G左右 Ubuntu系统盘制作 下载Ubuntu对应版本 xff0c 制作启动盘 Ubuntu安装 U盘启
  • nyist 27 水池数目(dfs搜索)

    xfeff xfeff 水池数目 时间限制 xff1a 3000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 南阳理工学院校园里有一些小河和一些湖泊 xff0c 现在 xff0c 我们把它们通一看成水池 xff
  • XTUOJ 1176 I Love Military Chess(模拟)

    xfeff xfeff I Love Military Chess Accepted 45 Submit 141Time Limit 1000 MS Memory Limit 65536 KB 题目描述 陆军棋 xff0c 又称陆战棋 xf
  • 数据结构课程设计之一元多项式的计算

    数据结构不是听会的 xff0c 也不是看会的 xff0c 是练会的 xff0c 对于写这么长的代码还是心有余也力不足啊 xff0c 对于指针的一些操作 xff0c 也还是不熟练 xff0c 总出现一些异常错误 xff0c 对于数据结构掌握还
  • 数据结构课程设计之通讯录管理系统

    数据结构的第二个课程设计 xff0c 在c语言课程设计的基础上加以改进 xff0c xff08 加强版 xff09 xff0c 保存一下代码 xff0c 对文件的处理 xff0c 还是有一点一问题 xff0c 还有待改进 include l
  • 在网页中添加音乐

    最近在折腾一个网页 xff0c 对于一个有强迫症的人来说 xff0c 就想在网页中插入音乐 xff0c xff08 当做背景音乐 xff09 xff0c 然后自己百度了好多资料 xff1b 就在这里总结一下 xff1a 第一步 xff1a
  • nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列 二 时间限制 xff1a 1000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 给定一整型数列 a1 a2 an xff08 0 lt n lt 61 100000 xff09 xff0c 找出
  • 思科CCNA第一学期期末考试答案

    1 第 3 层头部包含的哪一项信息可帮助数据传输 xff1f 端口号 设备物理地址 目的主机逻辑地址 虚拟连接标识符 2 IP 依靠 OSI 哪一层的协议来确定数据包是否已丢失并请求重传 xff1f 应用层 表示层 会话层 传输层 3 请参
  • 使用pprof分析在线服务cpu性能

    一 安装pprof go install github com google pprof 64 latest 执行后如果报下面错误 build github com google pprof cannot load embed malfor
  • hexo博客出现command not found解决方案

    由于前一段时间忙于考试 xff0c 也有好久没有去更新博客了 xff0c 今天去添加友链的时候 xff0c 突然发现用不了了 xff0c 出现了conmand not found的提示 xff1a 按照字面上的翻译就是 找不到所使用的命令
  • 思科CCNA第二学期期末考试答案

    1 关于数据包通过路由器传输时的封装和解封的叙述 xff0c 下列哪三项是正确的 xff1f xff08 选择三项 xff09 路由器修改 TTL 字段 xff0c 将其值减 1 路由器将源 IP 更改为送出接口的 IP 路由器保持相同的源

随机推荐