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

Ale*_*x B 19 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
Run Code Online (Sandbox Code Playgroud)

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

我想要做的是测量"免费"内存,但其中包括可能被丢弃的已使用页面,而不会对整个系统的性能产生重大影响.

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

当内核内存不足时,丢弃页面的优先级是什么?测量可用内存的更合适的度量标准是什么?

Tob*_*obu 8

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

看看Qt Extended(以前的Qtopia)如何预测OOM情况.

有两个事件:

  • (MemFree + Buffers + Cached)/ MemTotal <treshold(in /proc/meminfo)
  • 主要页面错误>阈值(/proc/vmstat我认为是pgmajfault )

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


Dav*_*ave 2

我想说,很难衡量哪些页面在删除时会导致系统“对整体系统性能产生重大影响”。用户进程使用的页面将为(总计)-(空闲+缓存+分页)。第二项是内核在需要时可以释放的所有内存。但是,释放用于缓存和页面的内存页面将对整体系统性能产生重大影响。

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