问题描述
运行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。
最佳解决办法
缓存之前的数字是文件系统的缓存缓冲区正在使用的物理内存量。
这是与SWAP相关的not actually,尽管它位于”Swap:”线上。
要通过一个小实验来验证我的答案,请尝试以下方法:
运行top并记下’cached’的值。现在跑
dd if=/dev/zero of=~/trick bs=1M count=128
如果再次跑到顶部,你会注意到’cached’增长了128M
现在删除该文件
rm ~/trick
再次跑到顶部,你会看到’cached’下降了128M
对于Mem:
total = used + free
和
used = <all apps> + buffers + cached
(其中缓冲区基本上是缓存的metadata)。有点混淆UI。
次佳解决办法
Linux内核将使用可用内存进行磁盘缓存,除非正在运行的程序需要它。
这被认为是好的;假设您有4 GB RAM,并且您的程序仅使用1 GB。其他3 GB将浪费。尽管”feel-good”印象知道你只使用了25%的内存,但另一方面是其他75%未使用。因此内核使用它来缓存文件,从而显著提高性能。这是自动的;与旧操作系统不同,您无需决定投入多少磁盘缓存或手动配置它。
“Linux磁盘缓存非常不引人注目。它使用备用内存来大大提高磁盘访问速度,而且不需要从应用程序中取出任何内存。在Linux上完全使用的ram存储是高效的硬件使用,而不是警告标志。”
这是一个常见问题,有一个专门讨论它的整个网站:
该网站甚至有办法清空磁盘缓存,这样你就可以运行一些应用程序,看看启用缓存的速度有多快:)