[转] 利用jemalloc分析内存泄漏
from: https://blog.intzero.net/tools/jemalloc.html
Jemalloc 不仅实现了一种通用的malloc, 还能利用它来做内存分析和监控/调优等.
这里介绍如何利用jemalloc来检测内存泄漏问题. 并且利用LD_PRELOAD
环境变量, 可以做到不需要源代码, 将jemalloc库嵌入到可执行程序中, 从而用jemalloc去malloc内存, 并进行管理. 也就是说, 每当程序中调用malloc/new时, 实际调用的是jemalloc里实现的函数.
Install
从releases获取jemalloc最新版.
参考: https://github.com/jemalloc/jemalloc/blob/dev/INSTALL.md
cd ~/jemalloc_test
wget https://github.com/jemalloc/jemalloc/releases/download/5.1.0/jemalloc-5.1.0.tar.bz2
tar zxvf jemalloc-5.1.0.tar.bz2
cd jemalloc-5.1.0
./configure --prefix=/home/intzero/jemalloc_test/jemalloc_install # 我这里装在自己目录下 make make install export PATH=/home/intzero/jemalloc_test/jemalloc_install/bin:$PATH
Getting Started
参考: https://github.com/jemalloc/jemalloc/wiki/Getting-Started
有几种方式将jemalloc整合到你的程序中.
- 一种是在源代码中加入jemalloc代码, 在build代码时嵌入.
- 另外一种是利用
LD_PRELOAD
环境变量, 在程序运行时就能嵌入, 不需要源代码.
另外可以通过 MALLOC_CONF
环境变量来调整jemalloc.
写个demo测试一下.
vi main.cpp
#include <stdlib.h>
#include <iostream> #include <jemalloc/jemalloc.h> using namespace std; void do_something(size_t i) { // Leak some memory. int *p = new int[i]; // or malloc(i * 4); } int main(int argc, char **argv) { for (size_t i = 1; i <= 1000; i++) { do_something(i); } cout << "jemalloc test." << endl; // Dump allocator statistics to stderr. malloc_stats_print(NULL, NULL, NULL); return 0; }
运行:
$ g++ main.cpp -o main -I`jemalloc-config --includedir` -L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs` $ ./main
可看到打印出来的内存信息.
Leak Checking
vi main.cpp
#include <stdlib.h>
#include <iostream> using namespace std; void do_something(size_t i) { // Leak some memory. int *p = new int[i]; // or malloc(i * 4); } int main(int argc, char **argv) { for (size_t i = 1; i <= 1000; i++) { do_something(i); } cout << "jemalloc test." << endl; return 0; }
运行:
$ g++ main.cpp -o main
$ MALLOC_CONF=prof_leak:true,lg_prof_sample:0,prof_final:true LD_PRELOAD=/home/intzero/jemalloc_test/jemalloc_install/lib/libjemalloc.so.2 ./main
上面这条命令会执行./main
, 并将jemalloc提前加载进去.
程序退出之后, 会生成类似jeprof.37252.0.f.heap
的文件. 查看详细信息:
$ jeprof --show_bytes `which ./main` jeprof.37252.0.f.heap Using local file jeprof.37252.0.f.heap. Welcome to jeprof! For help, type 'help'. (jeprof) top Total: 2173680 B 2173680 100.0% 100.0% 2173680 100.0% 0x00007f8f2f7d7ac0 0 0.0% 100.0% 2173680 100.0% 0x00007f8f2e5b1b13 0 0.0% 100.0% 2173680 100.0% 0x00007f8f2f788581 0 0.0% 100.0% 2173680 100.0% 0x00007f8f2f7e93a0 0 0.0% 100.0% 2173680 100.0% _start 0 0.0% 100.0% 2173680 100.0% do_something 0 0.0% 100.0% 2173680 100.0% main (jeprof)
还可以生成call graph的PDF文件:
jeprof --show_bytes --pdf `which ./main` jeprof.37252.0.f.heap > w.pdf
转载于:https://www.cnblogs.com/Arborday/p/10973502.html
[转] 利用jemalloc分析内存泄漏相关推荐
- 利用jemalloc分析内存泄漏以及LD_PRELOAD
<Linux环境下的LD_PRELOAD:库预加载> GitHub代码:https://github.com/Rtoax/test/tree/master/jemalloc 目录 Inst ...
- 利用S_MEMORY_INSPECTOR分析内存泄漏问题
我在批量生成service order时,report运行几个小时后,遇到out of memory exception: SM04里发现我的report随着时间的推移,消耗的内存越来越多: 如何找到 ...
- 利用MAT进行内存泄漏分析
##前言 对于程序员来说码代码容易,保证代码的稳定性很难.有时候写完一个功能可能只需要一天时间,但是这个功能隐藏的bug导致的线上问题排查可能需要一周或者更长时间.因此,拥有良好的代码结构和编码规范是 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
使用Memory Analyzer tool(MAT)分析内存泄漏(一) (2010年05月21日) 发表于 Java博客 前言的前言 :本文是自 2005 年 8 月以来,首次在一个月之内发布三篇文 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏
http://www.blogjava.net/rosen/archive/2010/05/21/321575.html http://www.blogjava.net/rosen/archive/2 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
前言 在 使用Memory Analyzer tool(MAT)分析内存泄漏(一)中,我介绍了内存泄漏的前因后果.在本文中,将介绍MAT如何根据heap dump分析泄漏根源.由于测试范例可能过于简单 ...
- Profiler分析内存抖动,Memory Analyzer(mat)分析内存泄漏(不懂砍我)
前言: 最近在系统性的温习了一遍android性能优化.写博客是学习也是记录,希望在记录的同时也能帮助其他同学.最近我觉得我想出一个不懂系列."不懂揍我","不懂砍我&q ...
- Memory Analyzer分析内存泄漏
Memory Analyzer分析内存泄漏 模拟一次内存溢出 程序不断地向ArrayList添加对象,直至溢出 public class User {String userName;String pa ...
- 手把手教你在Android-Studio上分析内存泄漏,面试必会
导语 本文的目的很简单,一句话:用最少的时间,最高效率,让你清楚:想要做Android开发,你需要学什么?你该在哪学? 本文的特点在于将繁琐的知识化为系列专题的形式展现给读者,当你能跟随博主构建的体系 ...
最新文章
- RabbitMQ超详细安装教程(Linux)
- Hadoop 单节点 伪分布 安装手记
- 第22届清华大学电子设计大赛决赛
- webpack 配置简单说几句 ?
- python画图-用Python画图
- shardingjdbc全局表_Sharding-JDBC动态分表实现
- 有关采用SMIv2 Internet协议的SNMPv2 MIB
- C语言中变量的储存类别
- java编程思想 Chapter 2
- 《智能家居产品 从设计到运营》——2.2 智能设备的触角:传感器
- 百度编辑器 UEditor 使用方法 及 如何设置固定高度且带滚动条及 如何设置修改传值的 name 属性
- ARP防火墙 (防如网络执法官、网络剪刀手、局域网终结者限制本机网速)
- mac安装ios和Android模拟器进行h5页面调试
- 【通过】华为OD机试真题59:叠积木
- 《炬丰科技-半导体工艺》通过蚀刻技术为LED衬底开发低成本、高通量的硅
- Map集合、 HashMap集合、LinkedHashMap集合、Hashtable集合
- C语言详解系列——函数的认识(4)函数的声明与定义,简单练习题
- 《2022爱分析·营销服一体化实践报告》发布:营销服一体化重塑企业增长新链路
- Smart210学习记录------块设备
- 有了钉钉和企业微信,企业还需要专属IM吗?