如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
如何衡量Linux中应用程序或进程的内存使用情况?
在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。
为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。
(注:这里详细介绍了这个问题。)
当前回答
更“真实世界”使用情况的一个好测试是打开应用程序,运行vmstat-s,并检查“活动内存”统计数据。关闭应用程序,等待几秒钟,然后再次运行vmstat-s。
无论释放了多少活动内存,应用程序显然都在使用中。
其他回答
如果您想要比使用Valgrind进行评测更快的东西,并且您的内核更旧,而且您不能使用smaps,那么一个带有显示进程驻留集选项的ps(使用ps-o rss,命令)可以让您快速、合理地了解所使用的非交换内存的实际数量。
除了答案中列出的解决方案之外,您还可以使用Linux命令“top”。它提供了运行系统的动态实时视图,并给出了整个系统的CPU和内存使用情况,以及每个程序的百分比:
top
通过程序PID进行过滤:
top -p <PID>
按程序名过滤:
top | grep <PROCESS NAME>
“顶部”还提供一些字段,例如:
VIRT—虚拟映像(kb):任务使用的虚拟内存总量
RES——驻留大小(kb):任务使用的非交换物理内存;RES=代码+数据。
DATA——数据+堆栈大小(kb):除可执行代码外,专用于其他代码的物理内存量,也称为“数据驻留集”大小或DRS。
SHR—共享内存大小(kb):任务使用的共享内存量。它只是反映了可能与其他进程共享的内存。
此处参考。
没有任何简单的计算方法。但有些人试图得到一些好的答案:
ps_mem.pyGitHub上的ps_mem.py
查看此shell脚本以检查Linux中应用程序的内存使用情况。
它也可以在GitHub上使用,并且没有粘贴和bc。
尝试pmap命令:
sudo pmap -x <process pid>