一.   Linux下确定内存泄露

在做嵌入式开发中,例如,在 Linux 下做 C/C++ 开发,会因为调用 malloc/calloc() 函数,忘记释放堆内存。程序运行久了,会发生内存泄露问题。

Linux 环境的 C/C++ 开发中,但是,当每次只是发生几个字节的内存泄露时,可以写一段测试内存泄露的代码来确认。而当代码中发生可见的大量的内存泄露问题时,可以使用 shell 命令来确认。

这里介绍 发生大量的内存泄露时,使用 shell 命令确认是否存在内存泄露的方法。常用的命令包括如下 shell 命令:

ps 命令

top 命令

free 命令

cat /proc/meminfo 或 cat /proc/$pid/status 命令

1.  ps 命令

ps 命令用来列出系统中当前正在运行的那些进程,列出的是当前那些进程的快照,就是执行 ps 命令的那个时刻的那些进程。确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。

ps 命令为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程实时监控,应该用 top 命令。

常用的命令如:

ps -ef | grep 进程关键字      //查看指定进程的信息

ps -aux       // 列出当前内存中的所有进程

ps aux --sort=%mem(或者 ps aux --sort %mem) //按照内存占用率的升序排序

ps aux --sort=-%mem  (或者 ps aux --sort -%mem) //按照内存占用率降序排序

ps aux | grep -e test       //打印含义test关键字的进程

ps -aux | grep -E "test|PID"      //打印 包含test关键字的进程信息

其中,ps -aux 是以 BSD 方式显示。ps -ef 是以 System V 方式显示,该种方式比 BSD 方式显示的多。

如下所示,使用  ps -aux | grep -E "gome|PID"  命令,可以显示包含 gome 关键字的进程信息,其中包括 CPU 占用,内存占用等。

2. top 命令

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows 的任务管理器。通常用来观察 CPU 或 内存的占用情况。

top 命令使用如下:

top -d -3     //3s 显示一次

top -p 1921 //显示进程号为 1921 的进程的信息

如下操作,输入 top -d 3 -p 1921 命令,表示 3 s 显示一次进程号为 1921的进程的信息。

3. free 命令

free 命令可以显示当前系统内存使用情况,主要用于确定设备是否存在内存泄漏。free 命令中的信息都来自于 /proc/meminfo 文件。

默认情况下,即在没有选项的情况下,free 命令显示内存的使用信息。默认按照 k(b) 的计数单位统计。

free 命令使用如下:

free -s 3:表示每隔 3 秒打印一次内存信息

如下操作,输入  free -s 3 -h 命令,表示 3 s 显示一次内存使用情况:

我们可以通过在设备启动和运行一段时间后,使用 free 命令查看 已使用内存(used) 的大小并进行对比,如果运行一段时间后 used内存 有很明显的增大,那很有可能是存在内存泄漏。

4.  cat /proc/meminfo 或 cat /proc/$pid/status 命令

 cat /proc/meminfo 命令用来查看 Linux 系统的内存使用情况。

cat /proc/$pid/status 命令,用来查看某个进程的内存使用信息。

查看 RAM 使用情况最简单的方法是通过 /proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具 (如 free / ps / top 命令) 等的组合显示。

注意:这个文件显示的单位是 kB 而不是 KB,1kB = 1000B,但是实际上应该是KB,1KB=1024B。这个显示是不精确的,是一个已知的没有被更正的历史遗留问题。因为很多程序依赖这个文件查看内存使用的是kB字符

如下所示:

如上所示,其中解释一下重要字段。如下:

MemTotal:  应用可以使用的内存总数

MemFree:    当前空闲的内存数目    
MemAvailable:   可用内存(MemFree + 可回收的内存),系统中有些内存虽然已被使用,但是可以回收,如cache、buffer、slab都有一部分可以回收。
Buffers:    用来给文件做缓存大小     
其他的参数暂不做解释。

Linux下查看内存泄露的命令相关推荐

  1. linux下查看内存使用情况

    在Linux下查看内存我们一般用free命令: [root@scs-2 tmp]# free              total       used       free     shared   ...

  2. linux内存平均值,linux下查看内存使用情况[转载]

    在Linux下查看内存我们一般用free命令: [root@scs-2 tmp]# free total used free shared buffers cached Mem: 3266180 32 ...

  3. Linux下查看内存型号、主板、硬盘等等

    @Linux下查看内存型号.主板.硬盘等等 首先查看是否安装了dmidecode工具 [root@algerfan ~]# dmidecode Linux 查看内存的插槽数,已经使用多少插槽.每条内存 ...

  4. linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()

    摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...

  5. Linux下查看内存使用情况方法总结

    关注.星标公众号,直达精彩内容 来自:Specs'Blog 链接:http://9iphp.com/linux/1247.html 原文:http://ask.xmodulo.com/check-me ...

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

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

  7. linux下查看内存频率,内核函数,cpu频率

    查看CPU: cat /proc/cpuinfo # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理C ...

  8. 轻松学会linux下查看内存频率,内核函数,cpu频率

    查看CPU: cat /proc/cpuinfo # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理C ...

  9. linux下查看文件内容的命令

    众所周知Linux中命令cat.more.less均可用来查看文件内容,主要区别有: cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况: ...

最新文章

  1. ajax的核心有哪些,ajax的核心
  2. 前端学习(1986)vue之电商管理系统电商系统之建立新分支
  3. 《程序设计与数据结构》实验2报告
  4. GSM/GPRS/EDGE简介
  5. 数学建模比赛论文模板格式
  6. 非中文正则表达式 php,php判断是不是为中文正则表达式大全(转)
  7. 五个免费数据采集工具网站
  8. IonIcons图标大全
  9. 如何将Kali Linux中的Firefox ESR浏览器语言设置为中文
  10. 倪静(201550919)第一次作业
  11. 打印系统开发(9)——办公打印机使用教程
  12. Excel 快速跳到表格最后一行/第一行
  13. 突破Flutter私有化仓库100M限制-Hosted packages must be smaller than 100 MB
  14. wincc报表日报表实例_wincc 报表,涉及变量计算的日报表怎么做
  15. Cipher Code
  16. 一台计算机两人共享使用,双人共享一台电脑主机 两个人同时使用一台电脑主机...
  17. 下载钉钉直播回放视频
  18. linux 查看大文件,Linux 查看大文件内容的方法
  19. ubuntu 18.04.02 + GTX1660 + CUDA_10.0 + CUDNN_7.6.4 安装脱坑记
  20. 图像归一化 normalization

热门文章

  1. 下载python的三个版本选择
  2. 航空公司营销渠道管理研究
  3. IKEv2与IKEv1的差异
  4. 【转载】【UEFI学习】edk2中各个包介绍
  5. HDU 4416 Good Article Good sentence(后缀数组)
  6. 艾恩技术access sql asp
  7. 关于MIDI键盘的服务对接
  8. 点到平面的距离公式【转】
  9. java jni c 指针_通过JNI传递C和Java之间的指针
  10. win10找不到gpedit.msc