在top命令中,“cached”是什么意思?

运行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,其中一个总是有大量的缓存(占用内存的70%),而另一个VPS提供商则始终显示为0。
2个回答

Linux内核会利用可用内存进行磁盘缓存,除非有运行中的程序需要使用。

这是一种很好的方式;假设你有4GB的内存,而你的程序只使用了1GB。剩下的3GB就浪费掉了。尽管知道自己只使用了25%的内存可能让人感觉良好,但另一方面,剩下的75%却没有被利用起来。因此,内核会将其用于缓存文件,从而显著提高性能。这是自动完成的;与旧操作系统不同,你不需要决定要分配多少内存给磁盘缓存,也不需要手动配置。

"Linux磁盘缓存非常不显眼。它利用闲置内存大幅提高磁盘访问速度,而且不会占用应用程序的内存。在Linux上充分利用内存是高效的硬件使用,而不是一个警告信号。"

这个问题如此常见,以至于有一个专门的网站来解答:

http://www.linuxatemyram.com

这个网站甚至有一种方法可以清空磁盘缓存,这样你就可以运行一些应用程序,看看启用缓存后它们有多快 :)

6喜欢这个答案,但由于声望不足,我暂时无法升级它。抱歉。 - KKK
4不用担心,我很高兴能够帮忙。希望这些信息对你有用! - roadmr
这应该是被接受的答案。哦,好吧... :( - ankush981
绝对应该是被接受的答案。linuxatemyram 是一个很棒的信息! - rafaelbattesti

缓存之前的数字是您的文件系统正在使用的缓存缓冲区占用的物理内存量。

尽管它在“Swap:”行上,但它实际上并不与SWAP相关。

为了通过一个小实验验证我的答案,请尝试以下操作:

运行top命令并注意'cached'的值。然后运行

dd if=/dev/zero of=~/trick bs=1M count=128

如果你再次运行top命令,你会注意到'cached'已经增长了128M
现在删除该文件。
rm ~/trick

再次运行top,你会看到'cached'已经减少了128M

所以对于Mem:

total = used + free

used = <所有应用程序> + buffers + cached

(其中buffers基本上是缓存的metadata)。有点令人困惑的用户界面。


我可以以任何方式影响这个吗?比如限制它或完全禁用它? - KKK
2你为什么想要这么做?你打算用它来做什么?这与物理内存中的文件系统缓存有关。 - user61928
因为大部分的文件系统都是一个数据库,而数据库有自己的缓存,所以我认为限制这一部分可能会有好处。 - KKK
你可以通过一些搜索来做到,但我不建议你这样做。这会限制文件系统的性能。 - user61928