目录

一、内存泄漏的概念

二、测试方法

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、检查代码

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

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

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

  1. Android内存优化(二):一分钟发现内存泄漏

    在上一篇文章Android内存优化(一):Java内存区域中已经大体上介绍了Java中的内存分布情况,这一篇主要讲一下内存泄漏的产生原因.内存泄漏的危害.内存泄漏一键分析与定位.以及代码中常见的内存泄 ...

  2. linux用户密码转换为明文,Linux运维知识之linux下抓取内存中明文密码mimipenguin

    本文主要向大家介绍了Linux运维知识之linux下抓取内存中明文密码mimipenguin,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 下载地址:https://githu ...

  3. Linux下的进程内存结构

    Linux下的进程内存结构 虚拟内存管理 Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的地址空间,该地址空间大小为4GB的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际 ...

  4. linux查看进程的内存使用情况,[转]linux下查看进程内存使用情况

    动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...

  5. Linux下进程间通信--共享内存:最快的进程间通信方式

    内存共享最新整理: Linux下进程间通信-共享内存 - 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式https://www.codecomeon.com/posts/109/ ...

  6. Linux下delete后内存仍然无法释放

    记录下工作中所遇到的问题 起因:公司自主研发的录屏文件系统管理服务器(主要用作录屏文件存储以及实时播放,当然也有普通文件上传下载的功能).当我们客户公司对服务器进行测压时,发现频繁调用某个函数后内存会 ...

  7. 操作系统知识整理——Linux下进程的内存布局以及brk()、sbrk()函数探究

    文章目录 前言 一.内存堆栈模型 二.系统栈和用户栈 三.函数调用时的内存栈分配 四.brk(), sbrk() 用法详解 前言 本篇文章是自己在学习xv6操作系统内核时,发现自己对进程在内存中的布局 ...

  8. linux查看主板最大内存容量,Linux下查看内存插槽数、最大...-linux下手动清理内存或缓存的...-查看linux主板内存槽与内存信息的方法详解_169IT.COM...

    一.先来看几个用dmidecode查看内存信息的例子. 1.查看内存槽数.那个槽位插了内存,大小是多少 代码示例: dmidecode|grep -P -A5 "Memory\s+Devic ...

  9. node linux cache补释放,linux下释放cache内存

    细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法 ...

最新文章

  1. Lucene 学习资料
  2. 关于c++变长参数列表总结
  3. VTK:几何对象之TriangleStrip
  4. mysql json坑_使用mysql innodb 使用5.7的json类型遇到的坑和解决办法
  5. [转]敏捷开发中编写高质量Java代码
  6. php 查询and or,php – SQL查询多个AND和OR不起作用
  7. 关于Pac-Man,你所要了解的 一切
  8. vpc源站保护_污染源自动监控设施运营要求
  9. MyEclipse下连接Mysql
  10. pandas 使用把dataframe变为series
  11. php dump函数详解,php中var_dump()函数的详解说明
  12. db2有主键时默认hash分区_Spark RDD依赖关系以及分区属性
  13. windows连接远程服务器报错‘SSH‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方案
  14. Oracle client 使用 .net程序连接 数据库时 出现 8.1.7 的解决办法
  15. java内存模型及GC原理
  16. 5.UML2 软件建模入门与提高 --- 类图
  17. llvm Pass简单实例
  18. js禁止苹果页面底部滚动_js禁止页面滚动
  19. java中奖概率_java实现抽奖概率类
  20. 【CodeForces】【状压DP】1155F-Delivery Oligopoly

热门文章

  1. Linux学习总结(81)—— Linux 权限详解
  2. python r转义_Python快速入门系列之二:还学不会我直播跪搓衣板
  3. c语言程序设计上机考试题,C语言程序设计上机考试题目汇编..doc
  4. php w 框架叫什么意思,框架是什么,为啥要用框架. 框架解决了什么
  5. java 带超时时间lru_如何在O(1)时间复杂度下实现LRU
  6. 反射 数据类型_这是一份超全面详细的Java反射机制学习指南
  7. 输入法 java_使用 Utf7ime 输入法实现中文输入 Windows+Java 平台(完整步骤版)
  8. IndexedDB 简单封装
  9. 智能家居产品持续发烧 增值应用功能多样化发展
  10. Linux系统个性化设置