英文原文: https://www.linuxatemyram.com/

作者: Vidar Holen

译者: thinkam

发生了什么?

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

为什么这么做?

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

如果我想运行更多的应用该怎么办?

如果你的应用想要获取更多的内存,系统会从磁盘缓存中拿走一块被借用的内存。磁盘缓存会立即还给应用!你的计算机可用内存的并不少!

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

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

我如何让Linux停止这样做?

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

如果不是这样,为什么topfree命令说我所有的内存已被使用?

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

但是,你认为目前被占用但仍然可以被应用使用的内存称作什么呢?

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

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

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

不严格来讲,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程序正在运行

我如何验证这些?

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

[译] Linux吃掉了我的内存的更多相关文章

  1. linux下对进程按照内存使用情况进行排序

    linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...

  2. 浅析Linux下进程间通信:共享内存

    浅析Linux下进程间通信:共享内存 共享内存允许两个或多个进程共享一给定的存储区.因为数据不需要在客户进程和服务器进程之间复制,所以它是最快的一种IPC.使用共享内存要注意的是,多个进程之间对一给定 ...

  3. 在 linux x86-32 模式下分析内存映射流程

    前言 虚拟内存机制已经成为了现代操作系统所不可缺少的一部分, 不仅可以为每个程序提供独立的地址空间保证安全性,更可以通过和磁盘的内存交换来提高内存的使用效率.虚拟内存管理作为linux 上的重要组成部 ...

  4. Linux Kernel 释放后重用内存损坏漏洞

    漏洞名称: Linux Kernel 释放后重用内存损坏漏洞 CNNVD编号: CNNVD-201307-305 发布时间: 2013-07-18 更新时间: 2013-07-18 危害等级:    ...

  5. 编程获取linux的CPU使用的内存使用情况

    Linux可用下top.ps命令检查当前的cpu.mem用法.下面简单的例子: 一.采用ps查看资源消耗的过程 ps -aux 当您查看进程信息,第三列是CPU入住. [root@localhost ...

  6. Linux 上 C 程序的内存布局

    在仔细研究这个问题之前,我认为 C 程序在内存中只有代码段,堆和栈三部分构成.前几天面试被问到了这个问题,才发现自己的印象是不完全的. 在本文中通过解析析一个 C 程序中变量和函数的地址来分析 C 程 ...

  7. linux下的CPU、内存、IO、网络的压力测试

    linux下的CPU.内存.IO.网络的压力测试  要远程测试其实很简单了,把结果放到一个微服务里直接在web里查看就可以了,或者同步到其他服务器上 一.对CPU进行简单测试: 1.通过bc命令计算特 ...

  8. Linux 查看物理 CPU、内存信息

    可以通过本文如下方法查看云服务器 Linux 系统的 CPU.内存相关信息: 说明: 总核数 = 物理CPU个数 × 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 × 每颗物理CPU的核数 ...

  9. [转帖]linux下的CPU、内存、IO、网络的压力测试

    linux下的CPU.内存.IO.网络的压力测试 https://www.cnblogs.com/zhuochong/p/10185881.html 一.对CPU进行简单测试: 1.通过bc命令计算特 ...

随机推荐

  1. 关于S/4HANA里Sales Office 和Sales Organization那些事儿

    今天这篇文章来自我的成都同事Zhang Sean(张正永). Sean也是一位在SAP行业摸爬滚打多年的老兵了,2009年从大学硕士毕业之后就进入了SAP Labs从事开发工作,目前是SAP 成都S/ ...

  2. 6、ABPZero系列教程之拼多多卖家工具 框架后台的设置

    接着上篇文章,现在去修改注册登录逻辑代码还为时过早,我们还需要到后台去设置一些配置. 管理---设置 先配置好这2项设置,邮箱配置是为了验证注册时功能是否正常,下一篇文章需要用到. 注:邮箱配置中的密 ...

  3. 002_JS基础_JavaScript基础语法01

    2.1 注释 单行注释: 在某一行使用"//"(两条斜线)可以把斜线之后的内容进行注释:多行注释: 使用"/* 这是要注释的内容 */"可以进行多行注释: /* ...

  4. 移动端300ms点击延迟

    移动端300ms点击延迟 原因:早期的苹果手机存在点击缩放,用手指在屏幕上快速双击后,iOS自带的Safari浏览器会将网页缩放至原始比例,后来很多浏览器也跟着学了. 解决方法:禁止缩放 <me ...

  5. 自定义注解,andjdk提供的元注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitN ...

  6. python写zip破解器

    浏览桌面依然平静,!!!!等等..怎么有个压缩包 打开一看!!!156.txt???waht the fuck? 卧槽还有密码!!!!!! 但是我不知道╮(╯▽╰)╭该怎么办呢! 很简单,python ...

  7. x+y=xy

        有一天,我拿这一本本子给两位同学看,问他们这本本子多少钱,一个说3块,一个说1.5块,但它实际上是4.5块.于是,我们发现,3X1.5=4.5,3+1.5=4.5.那么这样的数有哪些呢?    ...

  8. [国嵌攻略][044][初始化Bss段]

    BSS段的作用 1.变量存储的空间 初始化的全局变量:数据段 未初始化的全局变量:BSS段 局部变量:栈 动态分配变量:堆 2.为什么要对BSS段初始化 未初始化的全局变量在使用时才被赋值,未了避免在 ...

  9. c++---天梯赛---N个数求和

    ★题目: ★难点:要求只能以有理数和分数去输出结果. ★分析:可以对输入的数据进行通分处理,随后把结果按格式输出. ★代码: #include<iostream> #include< ...

  10. 98、vue.js简单入门

    本篇导航: 介绍与安装 vue常用指令 一.介绍与安装 vue是一套构建用户界面的JAVASCRIPT框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层, ...