Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux下查看内存泄露的命令

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

作者:凌肖战

这篇文章主要介绍了Linux下如何查看内存泄露的命令方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Linux下确定内存泄露

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

Linux 环境的 C/C++ 开发中,但是,当每次只是发生几个字节的内存泄露时,可以写一段测试内存泄露的代码来确认。

而当代码中发生可见的大量的内存泄露问题时,可以使用 shell 命令来确认。

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

常用的命令包括如下 shell 命令:

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 -h 命令,表示 3 s 显示一次内存使用情况:

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

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

查看 RAM 使用情况最简单的方法是通过 /proc/meminfo。

这个动态更新的虚拟文件实际上是许多其他内存相关工具 (如 free / ps / top 命令) 等的组合显示。

注意:这个文件显示的单位是 kB 而不是 KB,1kB = 1000B,但是实际上应该是KB,1KB=1024B。

这个显示是不精确的,是一个已知的没有被更正的历史遗留问题。

因为很多程序依赖这个文件查看内存使用的是kB字符

如下所示:

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

如下:

其他的参数暂不做解释。

总结

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

您可能感兴趣的文章:
阅读全文