对 Linux 中可用内存的理解
{Back to Index}
Table of Contents
1 磁盘缓存 buff/cache
Linux 会借用未使用的内存来做磁盘缓存。这使你的计算机看起来可用内存很少,但事实不是这样!一切都很正常!1
使用磁盘缓存使得系统运行更快更流畅!除了使新手感到困惑,没什么缺点。它从来没有以任何方式从你的应用拿走内存。 如果应用想要获取更多的内存,系统会从磁盘缓存中拿出一块被借用的内存还给应用程序,所以计算机可用内存其实并不少!
不能禁用磁盘缓存。 想要禁用磁盘缓存的唯一理由是认为磁盘缓存偷走了内存,但事实不是这样。 相反,它可以让应用加载更快并且运行更加流畅。因此,没有任何理由去禁用它。
1.1 page cache
Page cache
主要用来作为 文件系统上的文件数据 的缓存来用,尤其是针对当进程对文件有读写操作的时候。2
1.2 buffer cache
Buffer cache
主要是设计用来在系统对 块设备进行读写 的时候,作为数据缓存来使用。
1.3 清空磁盘缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches
2 查看可用内存 3
root@business-dashboard:~$ free total used free shared buff/cache available Mem: 4046288 3339360 130448 40996 576480 393548 ---> 可用内存 Swap: 3999740 146052 3853688
2.1 free 输出解释
Figure 1: free 组成
2.1.1 total
/proc/meminfo
中的 MemTotal ,表示计算机的内存总量。
2.1.2 used
被占用的内存,不能随时回收,其值为 total - free - buff/cache
。
2.1.3 free
完全没有被使用到的内存, /proc/meminfo
中的 Memfree 。
2.1.4 shared
/proc/meminfo
中的 Shmem ,共享内存,一般是被 tmpfs
占用。
2.1.5 buff/cache
文件系统的磁盘缓存。 对应 /proc/meminfo
中的 Buffers 和 /proc/meminfo
中的 Cached 。
大部分情况下,大部分 buffer/cache
占用的内存在需要时可以被回收并重新分配,但是要注意下面几点:4
shared
属于page cache
,所以cache
的统计里包括shared
,但是shared
不能被内核随时回收- 除了
shared
以外,buffer
或cache
对应的统计信息里,还有一部分被内核占用,这部分也不能被随时回收
2.1.6 available
应用程序真正可用的内存(比较准确的评估值),其值为 /proc/meminfo
中的 MemAvailable 。
3 内存健康状况特征
3.1 内存正常使用
free
内存接近于 0used
内存接近总共内存available
内存有足够空间(占总内存的 20% 以上)swap used
没有发生变化
3.2 内存告急
available
内存接近于 0swap used
在增加或者波动dmesg | grep oom-killer
命令显示 OutOfMemory-killer