运行时top
,我得到:
top - 09:10:52 up 18:37, 1 user, load average: 1.56, 1.33, 1.15
Tasks: 39 total, 1 running, 38 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.6%sy, 1.0%ni, 92.5%id, 5.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4194304k total, 3045460k used, 1148844k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 2256128k cached
看到这部分:2256128k 缓存?这到底是什么意思?
我正在比较两个提供商的两个 VPS,这个提供商的 VPS 总是有大量内存(已用内存的 70%),而另一个 VPS 提供商的 VPS 总是显示 0。
答案1
Linux 内核将使用可用内存进行磁盘缓存,除非正在运行的程序需要它。
这被认为是好的;假设你有 4 GB 的 RAM,而你的程序只使用了 1 GB。其他 3 GB 将被浪费。尽管知道你只使用了 25% 的内存会让人感觉“良好”,但相反的是,其他 75% 的内存未被使用。因此内核会使用它来缓存文件,从而显著提高性能。它是自动的;与旧操作系统不同,你不需要决定将多少内存用于磁盘缓存,也不需要手动配置它。
“Linux 磁盘缓存非常不显眼。它使用空闲内存来大大提高磁盘访问速度,并且不会占用应用程序的任何内存。Linux 上充分利用的 RAM 存储意味着硬件使用效率高,而不是警告信号。”
这是一个很常见的问题,甚至有一个网站专门讨论它:
该网站甚至有办法清空磁盘缓存,以便您可以运行一些应用程序并查看启用缓存后它们的速度有多快:)
答案2
缓存之前的数字是文件系统的缓存缓冲区所使用的物理内存量。
它是实际上不与 SWAP 相关,尽管位于“Swap:”行上。
要通过一个小实验来验证我的答案,请尝试以下操作:
运行 top 并记下“cached”的值。现在运行
dd if=/dev/zero of=~/trick bs=1M count=128
如果你再次运行 top,你会注意到“cached”已经增长了128米
现在删除文件
rm ~/trick
再次运行 top,你会看到“缓存”已经下降128米
因此对于 Mem 来说:
total = used + free
和
used = <all apps> + buffers + cached
(缓冲区基本上是元数据用于缓存)。用户界面有点混乱。