英文原文: 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. Java眼中的XML--------文件读取

     XML 的初次邂逅 初次邂逅XML 如何进行XML文件解析前的准备工作 在Java程序中如何获取xml文件的内容 在Java程序中读取xml文件的过程也成为----解析xml文件 解析的目的:获取节 ...

  2. junit测试模板 unit-test

    一个项目能否发布上线,重要的环节就是测试.经过集成测试.性能测试.压力测试等不断循环的测试过后依据测试报告来确定上线.这些由专业的测试人员来完成,因此会导致程序开发者对自身的单元测试的弱化.若在代码中 ...

  3. JavaScript练习2

    今天做了一些JS数组的练习题 一.往数组中插入一个数字 var attr = [1,2,3,4,5,6]; var c = 7; for(var i=0;i<attr.length;i++) { ...

  4. Angular17 Angular自定义指令

    1 什么是HTML HTML文档就是一个纯文本文件,该文件包含了HTML元素.CSS样式以及JavaScript代码:HTML元素是由标签呈现,浏览器会为每个标签创建带有属性的DOM对象,浏览器通过渲 ...

  5. 基本命令行操作1(java编译)

    1. 设置环境变量,具体:https://www.cnblogs.com/shinge/p/5500002.html "cd + 文件名" 可进入指定文件,"cd..&q ...

  6. bzoj:3616: War

    Description 小x所在的世界正在经历一场在k个阵营之间的战争.每个阵营有若干个炮塔,每个炮塔由攻击系统和防御系统组成.第i个炮塔可以攻击到离它欧几里德距离小于等于ri 或者曼哈顿距离小于等于 ...

  7. python3 爬淘女郎

    刚学到python 组合数据类型这里,机缘巧合之下得到了一个公开课的视频,也看了前辈写的,取其精华,去其糟粕的爬了一下: import urllibfrom urllib import request ...

  8. BLE空中升级 谈(一)

    BLE 空中升级谈 -- CC2541 的产品开发中OAD注意事项 现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里不谈论它是满足 ...

  9. ASP.NET没有魔法——ASP.NET OAuth、jwt、OpenID Connect

    上一篇文章介绍了OAuth2.0以及如何使用.Net来实现基于OAuth的身份验证,本文是对上一篇文章的补充,主要是介绍OAuth与Jwt以及OpenID Connect之间的关系与区别. 本文主要内 ...

  10. eclipse中常用提高效率的快捷键

    Eclipse快捷键 10个最有用的快捷键 5 4 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的 ...