https://mp.weixin.qq.com/s/a6mLMDinYQGUSaOsGYCEaA

独家|Linux进程内存用量分析之堆内存篇

姬晨烜 58技术 2019-12-06

导语

本文将介绍几种内存泄漏检测工具,并通过实际例子介绍一种分析堆内存占用量的工具和方法,帮助定位内存膨胀问题。

背景

进程的内存管理是每一个开发者必须要考虑的问题,对于C++程序进程来说,出现问题很多情况下都与内存挂钩。进程崩溃问题通常可以使用gdb等调试工具轻松排查并解决。而对于进程内存膨胀这类问题,原因通常有三个:

1.内存泄漏。

2.分配器管理的空闲内存较多而造成的内存空洞。

3.有未统计使用的未知内存占用。

内存泄漏问题可以使用一些工具来检测。但是对于后两种问题,却一直没有比较通用的方法去确定。本文将介绍几种内存泄漏检测工具,并通过实际例子介绍一种分析堆内存占用量的工具和方法,帮助定位内存膨胀问题。

常见内存问题的分析方法

对于内存泄露问题,目前已经有较成熟的工具进行检测,这里简单介绍两个工具:AddressSanitizer和Valgrind。AddressSanitizer是google开源项目,可以用来检测内存泄漏和其他导致进程崩溃的内存问题。它的优势在于造成的额外CPU占用很小,但是需要重新编译项目,并且在编译的时候添加-fsanitize=address选项。在程序运行时如果有任何内存问题,就会终止进程并且打印出详细的错误信息。如果进程存在内存泄漏会在进程结束后,打印出所有泄漏的内存大小和申请这块内存的调用栈,如下图所示:

 
 

最新文章

  1. SQL Server 变更数据捕获(CDC)监控表数据
  2. android自定义控件(1)-点击实现开关按钮切换
  3. NYOJ 38布线问题
  4. Nodejs Express 4.X 中文API 2--- Request篇
  5. 《零成本实现Web自动化测试--基于Selenium》 第四章 Selenium 命令
  6. JSOI2008最大数(线段树)
  7. GWT中实现跳转及不同entrypoint怎么互相访问
  8. HDU 3641 Treasure Hunting(阶乘素因子分解+二分)
  9. directive(指令里的)的compile,pre-link,post-link,link,transclude
  10. 2 Java对象的创建过程
  11. Mycat 分片规则详解--取模范围分片
  12. SOFA 源码分析 — 扩展机制
  13. cocos creator 刚体卡顿问题(边界会卡住)
  14. CRT-常用命令
  15. HTTP请求中的Keep-Alive模式,是怎么区分多个请求的?
  16. C# System.IO.FileStream
  17. swift--浮点数转换成整数(四舍五入/直接截断)
  18. HDU 3404 Switch lights(Nim积)题解
  19. python 之 决策树分类算法
  20. Python与Go选择排序

热门文章

  1. 4.mysql profile的使用方法
  2. JAVA读取EXCEL_自动生成实体类
  3. 蒲公英 · JELLY技术周刊 Vol.36: 你好 Hooks,再见 2020
  4. Linux top命令在生产环境的妙用
  5. 云计算之4---Cockpit
  6. java并发包工具(java.util.Concurrent)
  7. 容器编排系统K8s之flannel网络模型
  8. linux hosts_access
  9. 聊聊并发,进程通信方式,go协程简单应用场景
  10. 在MongoDB中执行查询与创建索引