gperf heap profiler
前言
gperf tools有很多功能,其中有一个heap profiler,可按函数级别定位分配内存的累积量
原理
gperf tools需要替换libc的malloc库,替换为tcmalloc:thread cache malloc,通过在tcmalloc加打桩,即可定位函数级别的内存的累积量
使用方法
工具准备
- git clone gperftools;切换至最新的稳定tag;
- 编译:autogen.sh && ./configure --prefix=/home/xxx/gperf_release/ && make all && make install
- 在gperf_release目录可得到libtcmalloc.a, pprof工具
程序准备
- 链接libtcmalloc.a;
- 假如监控的是整个程序, 可这样打桩:
- 引用头文件:gperf_release/include/gperftools/heap-profiler.h
- 在main函数的起始位置加入:HeapProfilerStart("/tmp/heap_prof"); 其中参数是log存放路径;
- 在main函数的结束位置加入:HeapProfilerStop();
- 为了确保程序退出时能执行“HeapProfilerStop”,可在这句代码前面增加while循环,当收到SIGINT时,退出循环,调用此函数;
运行测试
假设可执行程序名为run_test
- 程序启动: env HEAP_PROFILE_TIME_INTERVAL="5" run_test
- 程序运行后,每隔5秒会产生一个heap文件:/tmp/heap_prof.00xx.heap
- 查看heap占用信息:/home/xxx/gperf_release/bin/pprof --text run_test /tmp/heap_prof.00xx.heap
gperf heap profiler的更多相关文章
- 使用heap profiler进行内存占用分析
最近在项目中用到了google的heap profiler工具来分析内存占用,效果非常显著,因此在这里写一篇博客记录一下使用过程中遇到的一些问题. heap profiler依赖于tcmalloc,所 ...
- C++ Profiler工具之初体验
http://www.cnblogs.com/likwo/archive/2012/12/20/2826988.html 转 http://www.cnblogs.com/lenolix/archiv ...
- Chrome Devtools简介
Chrome开发工具(又称DevTools),是一套内嵌在chrome浏览器内部的web编写和调试工具.DevTools提供给web开发人员深入地访问浏览器内部和web应用的机会.DevTools可以 ...
- Chrome开发者工具之JavaScript内存分析
阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...
- Linux 下进程的内存空间分配
这里主要是以 C 语言为例,其他语言开发的程序,每个进程都会有一个类似的空间.下面是一段 C 代码: #include <stdlib.h> #include <stdio.h> ...
- [转载]JavaScript内存分析
https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools/blob/master/md/Performance-Profiling/javasc ...
- 了解 JavaScript 应用程序中的内存泄漏
简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理 ...
- [Effective Java]第二章 创建和销毁对象
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- java Hotspot 内存管理白皮书(中文翻译)
转自: http://my.oschina.net/u/568779/blog/166891 1引言 一个健壮的 Java™2平台,Standard Edition (J2SE™)拥有一个自动内存管理 ...
随机推荐
- VS2019 MSB364 未找到框架“NETFramework,Version=v4.7”
环境: WIN 10 VS2019 已安装框架v4.7.2 问题: 在打开一些早期项目时,编译报 MSB364 错误,未找到框架“NETFramework,Version=v4.7”或未找到框架“NE ...
- GO的执行原理以及GO命令
Go的执行原理以及Go的命令 一.Go的源码文件 Go 的源码文件分类: 如上图,分为三类: 1.命令源码文件: 声明自己属于 main 代码包.包含无参数声明和结果声明的 main 函数. 命令源码 ...
- 2018-2-13-win10-uwp-切换主题
原文:2018-2-13-win10-uwp-切换主题 title author date CreateTime categories win10 uwp 切换主题 lindexi 2018-2-13 ...
- CLRCore(CLR核心机制)
JIT--第一次--标记已--存根--调用--查找存根--执行机器码 C#和CIL的关系: C#和N#都是CIL实现,但是彼此不能互通: C#和N#公开不分满足规范,我们才能互通 CLS就是描述多语言 ...
- 17个常见的Python运行时错误
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲.随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题.下面整理了常见的17个错误, ...
- 黑马程序员面试宝典(Java)Beta6.0免费下载
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
- webpack管理资源(loader操作)
1.加载css npm install --save-dev style-loader css-loader webpack.config.js文件中: const path = require('p ...
- postgres 导出单个表的语句
-U表示用户 -h表示主机 -p表示端口号 -t表示表名 -f表示备份后的sql文件的名字 -d表示要恢复数据库名称 1.备份单表操作 ?pg_dump -U postgres -h localhos ...
- C/S与B/S架构
目录 软件开发架构 C/S架构 数据放在服务端和客户端的利弊: B/S架构 软件开发架构 开发软件,必须要开发一套 客户端 和 服务端 服务端与客户端的作用 服务端:24小时不间断提供服务 客户端:享 ...
- emacs 设置emacs的外观
设置emacs的外观 emacs的外观包括文本区的外观,辅助区的外观,状态行的外观,光标的外观等, 每个外观都有名字,并且都有下面属性: Font Family: 字体名字 Font Foundry: ...