如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
当前回答
使用Ubuntu中提供的内置System Monitor GUI工具。
其他回答
在最新版本的Linux中,使用smaps子系统。例如,对于PID为1234的进程:
cat /proc/1234/smaps
它会确切地告诉你当时它使用了多少内存。更重要的是,它将把内存分为私有和共享,这样你就可以知道你的程序实例使用了多少内存,而不包括程序的多个实例之间共享的内存。
如果您的代码是C或C++,您可能可以使用getrusage(),它会返回有关进程内存和时间使用情况的各种统计信息。
但并非所有平台都支持这一点,并将为内存使用选项返回0值。
相反,您可以查看在/proc/[pid]/statm中创建的虚拟文件(其中[pid]被您的进程id替换)。
此文件看起来像一个包含7个整数的文本文件。您可能对该文件中的第一个(所有内存使用)和第六个(数据内存使用)数字最感兴趣。
查看此shell脚本以检查Linux中应用程序的内存使用情况。
它也可以在GitHub上使用,并且没有粘贴和bc。
我正在使用Arch Linux,有一个很棒的软件包叫做ps_mem:
ps_mem -p <pid>
示例输出
$ ps_mem -S -p $(pgrep firefox)
Private + Shared = RAM used Swap used Program
355.0 MiB + 38.7 MiB = 393.7 MiB 35.9 MiB firefox
---------------------------------------------
393.7 MiB 35.9 MiB
=============================================
我建议您使用top。你可以在这个页面上找到关于它的一切。它能够为您的流程提供所有必要的KPI,还可以捕获到文件中。