如何可靠地测量Linux中的可用内存?

时间:2010-06-11 02:01:32

标签: linux virtual-memory

Linux /proc/meminfo显示了许多内存使用情况统计信息。

MemTotal:      4040732 kB
MemFree:         23160 kB
Buffers:        163340 kB
Cached:        3707080 kB
SwapCached:          0 kB
Active:        1129324 kB
Inactive:      2762912 kB

他们之间有很多重叠。例如,据我所知,可以有活动页面缓存(属于“缓存”和“活动”)和非活动页面缓存(“非活动”+“缓存”)。

我想要做的是测量“免费”内存,但其方式是包含可能被丢弃的已用页面而不会对整体系统的性能产生重大影响。

起初,我倾向于使用“免费”+“非活动”,但Linux的“免费”实用程序在其“缓冲区调整”显示中使用“免费”+“缓存”,所以我很好奇什么是更好的方法是

当内核内存不足时,要删除的页面的优先级是什么,以及衡量可用内存的更合适的度量标准是什么?

5 个答案:

答案 0 :(得分:8)

因为“可用内存”的确切含义取决于您的目的,您的目的是避免OOM情况:

查看how Qt Extended (previously Qtopia) anticipates OOM situations.

有两件事:

  • (MemFree + Buffers + Cached)/ MemTotal<门槛(/proc/meminfo
  • 主要网页故障> treshold(我认为/proc/vmstat中的pgmajfault)

第一个是内存不足的早期警告,并触发更频繁的页面故障监控。第二个信号摧毁,这会杀死系统性能,并且是OOM杀手将会运行的良好暗示。

答案 1 :(得分:3)

起初我发现你的问题很简单,因为在实践中,{+ 1}}中的'+ buffers / cache'列中的输出是我使用的,它通常可以正常工作。

但是其中一个不起作用的情况是你对相同的块有大量读取。例如。一遍又一遍地阅读相同的1 gb_file:

free

如果您的系统有> 1 GB缓存然后这将快速运行。但是如果你开始使用其他一些缓存,它将破坏系统的性能。

因此,当您评估您的解决方案时,请尝试以上操作并查看解决方案是否考虑到了这一点。

答案 2 :(得分:2)

我会说很难测量哪些页面在被删除时会导致系统“对整体系统性能产生重大影响”。用户进程使用的页面将是(Total) - (Free + Cached + Paged)。第二个术语是内核可以释放的所有内存(如果需要)。但是,释放用于缓存和页面的内存页面会对整体系统性能产生重大影响。

如果我要使用启发式,我会说你应该取“非活动”的值,即“缓冲区或页面缓存内存的总量,以千字节为单位,是免费的和可用的。这是最近没有使用的内存,可以回收用于其他目的。“如果你发现你采取了这个并且系统继续正常工作,你可以估计一些百分比的“活动”作为猜测,因为系统最近可能已经使用了一些页面,但不会再次使用它们。你比我更了解这个系统。如果系统专用于您将要做的任何事情,那么Active中可能很快就会使用的页面和缓存文件将取决于系统最近是否用于其他内容。

答案 3 :(得分:2)

我使用以下内容:

FREE_KB = MemFree + Buffers + Cached

FREE_KB=$(($(echo `sed -n '2p;3p;4p' <  /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g")))


USED_KB = MemTotal - MemFree - Buffers - Cached

USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g")))

答案 4 :(得分:2)

从linux-3.14开始,/ proc / meminfo中有新的度量标准MemAvailable。

并在免费实用的输出中检查行' - / + buffers / cache:'。