top 命令中的“缓存”是什么?

KKK*_*KKK 50 memory top

运行时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
Run Code Online (Sandbox Code Playgroud)

看部分:2256128k缓存?这到底是什么意思呢?

我正在比较来自两个提供商的两个 VPS,这个总是有大量的(已用内存的 70%),而另一个 VPS 提供商总是显示 0。

roa*_*dmr 124

Linux 内核将使用可用内存进行磁盘缓存,除非正在运行的程序需要它。

这被认为是好的;假设您有 4 GB RAM,而您的程序仅使用 1 GB。其他 3 GB 将被浪费。尽管知道您只使用了 25% 的内存带来了“感觉良好”的印象,但相反的情况是另外 75% 的内存没有使用。所以内核使用它来缓存文件,这显着提高了性能。它是自动的;与较旧的操作系统不同,您无需决定投入多少磁盘缓存,或手动配置它。

“Linux 磁盘缓存非常不引人注目。它使用备用内存来大大提高磁盘访问速度,并且不会从应用程序中占用任何内存。Linux 上充分使用的内存存储是有效的硬件使用,而不是警告信号。”

这是一个非常常见的问题,以至于有一个完整的网站专门讨论它:

http://www.linuxatemyram.com

该网站甚至有一种方法可以清空磁盘缓存,这样您就可以运行一些应用程序,并查看启用缓存的情况下它们的速度有多快:)

  • 喜欢答案,但由于缺乏声誉,我无法升级它(还)。对不起。 (5认同)
  • 别担心,我很高兴能帮到你。希望信息有用! (4认同)

小智 19

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

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

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

运行 top 并注意 'cached' 的值。现在运行

dd if=/dev/zero of=~/trick bs=1M count=128
Run Code Online (Sandbox Code Playgroud)

如果你再次运行 top 你会注意到 'cached' 已经增长了128M

现在删除文件

rm ~/trick
Run Code Online (Sandbox Code Playgroud)

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

所以对于内存:

total = used + free

used = <all apps> + buffers + cached

(其中缓冲区基本上是缓存的元数据)。UI有点混乱。

  • 你为什么要这样做?!你要怎么办?!它是关于文件系统如何在物理内存中缓存的。 (2认同)