[译] Linux吃掉了个人内存

英文原文: https://www.linuxatemyram.com/
做者: Vidar Holen
译者: thinkamhtml

发生了什么?

Linux正借用你未使用的内存来作磁盘缓存。这使你的计算机看起来可用内存不多,但事实不是这样!一切都很正常!linux

为何这么作?

磁盘缓存使你的系统运行更快更流畅!除了使新手感到困惑,这没什么缺点。它历来没有以任何方式从你的应用拿走内存。git

若是我想运行更多的应用该怎么办?

若是你的应用想要获取更多的内存,系统会从磁盘缓存中拿走一块被借用的内存。磁盘缓存会当即还给应用!你的计算机可用内存的并很多!github

我须要更多的交换分区(swap)吗?

不须要,磁盘缓存仅会借用应用目前不须要的内存。它不会使用交换分区。若是应用须要更多的内存,系统会从磁盘缓存中拿回来。系统不会使用交换分区。缓存

我如何让Linux中止这样作?

你不能禁用磁盘缓存。任何人想要禁用磁盘缓存的惟一理由是他认为这从他的应用中拿走了内存,但事实不是这样!磁盘缓存可让应用加载更快而且运行更加流畅,但它却历来没有拿走内存!所以,没有任何理由去禁用它!bash

若是不是这样,为何topfree命令说我全部的内存已被使用?

这仅仅是用辞的差别。你和Linux系统一致认为被应用占用的内存称为used,而没有被任何程序使用的部分称为freekoa

可是,你认为目前被占用但仍然能够被应用使用的内存称做什么呢?测试

你可能认为这部份内存是freeavailable。而Linux系统称它usedavailable:code

内存 你称它 Linux称它
被应用使用 used used
被占用,但可使用 free(或available) used(或available)
没有用来作任何事 free free

译注:老版free命令中被占用但可使用的内存称为used(used中的一部分,即buffers+cached), 而新版的free命令中称之为availablehtm

不严格来说,topfree命令称这部份内存为bufferscached。由于你和Linux用辞的差别,你可能认为你的计算机可用内存不多,不过事实并不是如此。

译注:这部份内存准确来讲是新版本free命令中的available或者是新版本top命令中的avail Mem

我怎么看我真正还有多少可用内存?

为了弄明白除了交换分区外你的应用可使用多少内存,执行free -m命令,而后查看available那一列:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1504        1491          13           0         855      792
Swap:          2047           6        2041

(2016年以前的Linux安装版本,在-/+ buffers/cache那排查看free列)

这是你以MB为单位的答案。若是你天真地查看usedfree,你会认为你的内存几乎快占满达到99%,然而实际仅仅只有47%!

若是想查看更详细、更专业的关于Linux统计available内存大小的描述,请看the commit that added the field.

何时我该开始担忧?

一个拥有足够内存的、运行良好的Linux系统在运行一段时间后会表现出如下预期的无害特征:

  • free内存接近于0
  • used内存接近总共内存
  • available内存(或者是free + buffers/cache)有足够空间(好比说:总内存的20%以上)
  • swap used没有发生变化

真正的内存不够、你也许想调查缘由的情形,警告标志以下:

  • available内存(或者是free + buffers/cache)接近于0
  • swap used在增长或者波动
  • dmesg | grep oom-killer命令显示OutOfMemory-killer程序正在运行

我如何验证这些?

若是想了解更多细节和作实验测试磁盘缓存的影响,请看这个页面。我作了少许的工做只是想让你感激磁盘缓存,而不是让你测试你的硬件速度提高了几个数量级。

相关文章
相关标签/搜索