如何衡量Linux中应用程序或进程的内存使用情况?

在博客文章《了解Linux上的内存使用情况》中,ps并不是一个准确的工具。

为什么ps是“错误的”根据您的看法,ps不会报告进程的实际内存使用情况。它真正要做的是显示如果只有一个进程在运行,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是错误的。

(注:这里详细介绍了这个问题。)


当前回答

如果您想要比使用Valgrind进行评测更快的东西,并且您的内核更旧,而且您不能使用smaps,那么一个带有显示进程驻留集选项的ps(使用ps-o rss,命令)可以让您快速、合理地了解所使用的非交换内存的实际数量。

其他回答

在最新版本的Linux中,使用smaps子系统。例如,对于PID为1234的进程:

cat /proc/1234/smaps

它会确切地告诉你当时它使用了多少内存。更重要的是,它将把内存分为私有和共享,这样你就可以知道你的程序实例使用了多少内存,而不包括程序的多个实例之间共享的内存。

/prox/xxx/numa_maps提供了一些信息:N0=???N1=???。但这个结果可能低于实际结果,因为它只计算那些被触摸过的对象。

如果进程没有占用太多内存(可能是因为您希望是这样,或者其他命令给出了这个初始指示),并且进程可以承受短时间的停止,您可以尝试使用gcore命令。

gcore <pid>

检查生成的核心文件的大小,以了解特定进程正在使用多少内存。

如果进程使用数百兆字节或千兆字节,这将不会太好,因为根据I/O性能,核心生成可能需要几秒钟或几分钟才能创建。在核心创建过程中,进程被停止(或“冻结”)以防止内存更改。所以要小心。

还要确保生成核心的装载点有足够的磁盘空间,并且系统不会对在该特定目录中创建的核心文件做出负面反应。

使用Ubuntu中提供的内置System Monitor GUI工具。

更“真实世界”使用情况的一个好测试是打开应用程序,运行vmstat-s,并检查“活动内存”统计数据。关闭应用程序,等待几秒钟,然后再次运行vmstat-s。

无论释放了多少活动内存,应用程序显然都在使用中。