Linux下如何查看内存泄露的命令

 更新时间:2023年09月04日 08:43:58   作者:凌肖战  
这篇文章主要介绍了Linux下如何查看内存泄露的命令方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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:用来给文件做缓存大小     

其他的参数暂不做解释。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • apache SHTML网页SSI使用详解

    apache SHTML网页SSI使用详解

    在网站构建过中。当我们遇到很多的内容为静态页面,而页首与页脚又经常要更换时,如果一直使用html文件总会有很多的麻烦。
    2009-10-10
  • apache无法启动的可能原因分析及对策

    apache无法启动的可能原因分析及对策

    在遇到apache无法启动时,可以参照如下可能的原因进行分析与解决,有类似情况的朋友可以参考下哈
    2013-05-05
  • 详解Linux下Tomcat开启查看GC信息

    详解Linux下Tomcat开启查看GC信息

    这篇文章主要介绍了详解Linux下Tomcat开启查看GC信息,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • ubuntn备份方法总结(四种)

    ubuntn备份方法总结(四种)

    本文给大家收藏整理了四种关于ubuntn备份方法,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-11-11
  • CentOS7.2 忘记root密码及重置root密码的简单处理方法

    CentOS7.2 忘记root密码及重置root密码的简单处理方法

    这篇文章主要介绍了CentOS7.2 忘记root密码的简单处理方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • Linux下如何搭建两个tomcat服务

    Linux下如何搭建两个tomcat服务

    本篇文章主要介绍了Linux下如何搭建两个tomcat服务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • linux用户source .bashrc或.profile找不到文件的解决

    linux用户source .bashrc或.profile找不到文件的解决

    这篇文章主要介绍了linux用户source .bashrc或.profile找不到文件的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 从0开始简单部署腾讯云服务器的方法步骤

    从0开始简单部署腾讯云服务器的方法步骤

    这篇文章主要介绍了从0开始简单部署腾讯云服务器的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Linux中的screen命令使用详解

    Linux中的screen命令使用详解

    这篇文章主要介绍了Linux中的screen命令使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Linux系统中CPU占用率较高问题排查思路与解决方法

    Linux系统中CPU占用率较高问题排查思路与解决方法

    这篇文章主要给大家介绍了关于Linux系统中CPU占用率较高问题排查思路与解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07

最新评论