Linux下如何发现内存泄漏问题(测试角度)

本文介绍了内存泄漏的概念,包括其类型和影响,并提出了一系列测试方法,如长期稳定性测试、大数据量测试、资源监控(使用free和top命令)、观察应用运行情况、分析日志和检查代码,以帮助定位和解决内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、内存泄漏的概念

二、测试方法

1、长期稳定性测试

2、大数据量测试

3、结合free、top等命令进行资源监控

4、持续观察上层应用运行情况

5、查看日志

6、检查代码


一、内存泄漏的概念

内存泄漏指的是由于疏忽或错误造成程序未能释放已经不再使用的内存。

所以它并非指内存在物理上的消失,而是由于失去控制而造成的内存浪费。

按发生的方式来分类,内存泄漏可以分为4 类:

  • 常发性内存泄漏。发生内存泄漏的代码会被多次执行,每次执行都会导致一块内存泄漏。
  • 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生,与常发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
  • 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅有一块内存发生泄漏。
  • 隐式内存泄漏。程序在运行过程中不停地分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,但是对于一个需要运行几天,几周甚至几个月的程序来说,不及时释放内存也可能导致最终耗尽系统的所有内存。

二、测试方法

1、长期稳定性测试

保证软件至少运行7*24小时,测试过程中有持续的数据变化。

2、大数据量测试

这里的大数据量不仅指总数据量大,也包括单个数据的数据量大,比如单块磁盘大小超过2TB、单个虚拟机数据量超过4TB。

但大数据量只是发现内存泄漏问题的充分不必要条件。

3、结合free、top等命令进行资源监控

free命令:

top命令:第四行展示的是内存总量、内存使用量、空闲内存以及块设备缓冲。

也可以看到待监控进程的内存占用百分比。如果这里的内存占用百分比增速过快,则需要考虑是否存在内存泄露的问题。

4、持续观察上层应用运行情况

在长期和大数据量环境下,内存泄漏可能会导致上层应用卡死、应用进程被kill等现象。此时可以通过日志查看是否与内存有关。

5、查看日志

如下图是从messages中获取到的,因为应用进程的内存占用过高(165G)导致进程被kill的日志信息:

同样的,也可以查看更详细的应用日志。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块。如下图如果无法一一对应,则可能存在内存泄漏:

6、检查代码

测试人员已经判断代码中可能存在内存泄漏问题,那接下来就可以找开发人员定位具体的内存泄漏位置并修复问题了。

我在网上看到很多专门用于内存检测的工具,还需要继续学习学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值