别慌! 你的内存很正常!
发生了什么?
Linux正在借用未使用的内存用来作为磁盘缓存。这会使得你的可用内存看起来会很少,但其实不是的,一切都很好!
为什么这样做?
磁盘缓存会让linux系统运行的更快,响应更积极!除了让初学者感到困惑外,这样做,没什么缺点!它不会以任何形式占用应用程序的内存!
如果我想运行更多的应用程序呢?
如果你的应用程序想要更多的内存,它们只需要从借出的磁盘缓存中取回可用的数据块即可。磁盘缓存
能立即还回内存给应用程序,你的内存并不低!
我需要更多的swap内存吗?
不,磁盘缓存仅借用应用程序当前不需要的内存。它不会使用swap。如果应用程序需要更多内存,它们只需从磁盘缓存中取回内存。它们不会开始交换。
如何阻止Linux这样做?
不能禁用磁盘缓存。任何人想要禁用磁盘缓存的唯一原因是,他们认为这会从他们的应用程序中带走内存,而事实并非如此! 磁盘缓存使应用程序加载更快,运行更流畅,但它永远不会占用内存! 因此,完全没有理由禁用它!
如果不是,为什么‘top’ 和 ‘free’ 命令显示的内存都已经被使用了?
这只是术语上的差异,你和linux都认为应用程序占用的内存是“used”的,而未用于任何事物的内存是“free”的。但是如何统计当前用于某事但仍可用于应用程序的内存呢?你可能认为该内存是“used”或者是“available”。linux则称之为“used”,但是仍然是“available”。
内存 | 你叫它 | Linux 叫它 |
---|---|---|
被应用程序使用的 | Used | Used |
被使用了, 但是仍然是可用的 | Free (or Available) | Used(and Available) |
没用被任何事物使用过的 | Free | Free |
这个“东西”(大概)就是top和free所称的“缓冲区”和“缓存”。由于您和Linux的术语不同,您可能会认为自己内存不足,但事实并非如此。
我怎么知道我到底有多少空闲内存?
要查看您的应用程序在没有swap的情况下可以使用多少内存,请运行free -m并查看“available”列:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 792
Swap: 2047 6 2041
如果你只是天真的看 “used” 和 “free” ,你会认为你的内存已经使用了99%,但其实只使用了47%。如果你想要更详细的关于 “available” 的统计说明,请参阅 the commit that added the field
我应该什么时候开始担心呢?
一个如果有足够内存的健康的linux系统,在运行一段时间后,一般会出现以下预期的无害行为:
- free 接近于0
- used 接近于 total
- available / free buffers/cache 有足够空间,比如说20%
- swap used 不变
真正的内存不足的情形:
- available / free buffers/cache 接近于0
- swap used 在增加或者在波动
- dmesg | grep oom-killer 显示 OutOfMemory-killer 在工作
我如何验证这些东西?
有关更多详细信息,以及如何试验磁盘缓存以显示这里描述的效果,请参阅此页。没有什么比在您自己的硬件上测量数量级的加速更能让您欣赏磁盘缓存了!