Linux进程内存用量分析之堆内存篇
2024-10-19 19:46:58
https://mp.weixin.qq.com/s/a6mLMDinYQGUSaOsGYCEaA
独家|Linux进程内存用量分析之堆内存篇
姬晨烜 58技术 2019-12-06
导语
本文将介绍几种内存泄漏检测工具,并通过实际例子介绍一种分析堆内存占用量的工具和方法,帮助定位内存膨胀问题。
背景
进程的内存管理是每一个开发者必须要考虑的问题,对于C++程序进程来说,出现问题很多情况下都与内存挂钩。进程崩溃问题通常可以使用gdb等调试工具轻松排查并解决。而对于进程内存膨胀这类问题,原因通常有三个:
1.内存泄漏。
2.分配器管理的空闲内存较多而造成的内存空洞。
3.有未统计使用的未知内存占用。
内存泄漏问题可以使用一些工具来检测。但是对于后两种问题,却一直没有比较通用的方法去确定。本文将介绍几种内存泄漏检测工具,并通过实际例子介绍一种分析堆内存占用量的工具和方法,帮助定位内存膨胀问题。
常见内存问题的分析方法
对于内存泄露问题,目前已经有较成熟的工具进行检测,这里简单介绍两个工具:AddressSanitizer和Valgrind。AddressSanitizer是google开源项目,可以用来检测内存泄漏和其他导致进程崩溃的内存问题。它的优势在于造成的额外CPU占用很小,但是需要重新编译项目,并且在编译的时候添加-fsanitize=address选项。在程序运行时如果有任何内存问题,就会终止进程并且打印出详细的错误信息。如果进程存在内存泄漏会在进程结束后,打印出所有泄漏的内存大小和申请这块内存的调用栈,如下图所示:
最新文章
- SQL Server 变更数据捕获(CDC)监控表数据
- android自定义控件(1)-点击实现开关按钮切换
- NYOJ 38布线问题
- Nodejs Express 4.X 中文API 2--- Request篇
- 《零成本实现Web自动化测试--基于Selenium》 第四章 Selenium 命令
- JSOI2008最大数(线段树)
- GWT中实现跳转及不同entrypoint怎么互相访问
- HDU 3641 Treasure Hunting(阶乘素因子分解+二分)
- directive(指令里的)的compile,pre-link,post-link,link,transclude
- 2 Java对象的创建过程
- Mycat 分片规则详解--取模范围分片
- SOFA 源码分析 — 扩展机制
- cocos creator 刚体卡顿问题(边界会卡住)
- CRT-常用命令
- HTTP请求中的Keep-Alive模式,是怎么区分多个请求的?
- C# System.IO.FileStream
- swift--浮点数转换成整数(四舍五入/直接截断)
- HDU 3404 Switch lights(Nim积)题解
- python 之 决策树分类算法
- Python与Go选择排序