0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

free命令介绍!内存的分类!

马哥Linux运维 来源:未知 作者:李倩 2018-09-10 17:21 次阅读

在Windows下资源管理器查看内存使用的情况,如果使用率达到80%以上,再运行大程序就能感觉到系统不流畅了,因为在内存紧缺的情况下使用交换分区,频繁地从磁盘上换入换出页会极大地影响系统的性能。而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件。

这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃掉我们的内存(Linux ate my ram),但其实这也正是其内存管理的特点。

free命令介绍

下面为使用free命令查看我们实验室文件服务器内存得到的结果,-m选项表示使用MB为单位:

输出的第二行表示系统内存的使用情况:

Mem: total(总量)= 3920MB,

used(已使用)= 1938MB,

free(空闲)= 1982MB,

shared(共享内存)= 0MB,

buffers = 497MB,

cached = 1235MB

注:前面四项都比较好理解,buffer 和 cache找不到合适的词来翻译,它们的区别在于:

A buffer is something that has yet to be “written” to disk.

A cache is something that has been “read” from the disk and stored for later use.

即buffer用于存放要输出到磁盘的数据,而cache是从磁盘读出存放到内存中待今后使用的数据。它们的引入均是为了提供IO的性能。

输出的第三行表示在第二行的基础上-/+ buffers/cache得到的:

– buffers/cache used = Mem used – buffers – cached = 1938MB – 497MB – 1235MB = 205MB

+ buffers/cache free = Mem free + buffers + cached = 1982MB + 497MB + 1235MB = 3714MB

输出的第三行表示交换分区使用的情况:

Swap:total(总量)= 4095MB

used(使用)= 0MB

free(空闲)= 4095MB

由于系统当前内存还比较充足,并未使用到交换分区。

上面输出的结果比较难理解的可能是第三行,为什么要向用户展示这行数据呢?内存使用量减去系统buffer/cached的内存表示何意呢?系统空闲内存加上buffer/cached的内存又表示何意?

内存的分类

我们把内存分为三类,从用户和操作系统的角度对其使用情况有不同的称呼:

上表中something代表的正是free命令中”buffers/cached”的内存,由于这块内存从操作系统的角度确实被使用,但如果用户要使用,这块内存是可以很快被回收被用户程序使用,因此从用户角度这块内存应划为空闲状态。

再次回到free命令输出的结果,第三行输出的结果应该就能理解了,这行的数字表示从用户角度看系统内存的使用情况。因此,如果你用top或者free命令查看系统的内存还剩多少,其实你应该将空闲内存加上buffer/cached的内存,那才是实际系统空闲的内存。

buffers/cached好处

Linux内存管理做了很多精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache,目的就是为了提升磁盘IO的性能。从低速的块设备上读取数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,它可以从内存中直接读取,从而绕开低速的块设备,从而提高系统的整体性能。

而Linux会充分利用这些空闲的内存,设计思想是内存空闲还不如拿来多缓存一些数据,等下次程序再次访问这些数据速度就快了,而如果程序要使用内存而系统中内存又不足时,这时不是使用交换分区,而是快速回收部分缓存,将它们留给用户程序使用。

因此,可以看出,buffers/cached真是百益而无一害,真正的坏处可能让用户产生一种错觉——Linux耗内存!

其实不然,Linux并没有吃掉你的内存,只要还未使用到交换分区,你的内存所剩无几时,你应该感到庆幸,因为Linux缓存了大量的数据,也许下一次你就从中受益。

实验证明

下面通过实验来验证上面的结论:

我们先后读入一个大文件,比较两次读入的实践:

1.首先生成一个1G的大文件

2.清空缓存

3.读入这个文件,测试消耗的时间

4.再次读入该文件,测试消耗的时间

从上面看出,第一次读这个1G的文件大约耗时18s,而第二次再次读的时候,只耗时0.3s,足足提升60倍!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11232

    浏览量

    208945
  • 内存
    +关注

    关注

    8

    文章

    3004

    浏览量

    73900

原文标题:Linux内存被吃掉了,它去哪里了?

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux内存中的Cache真的能被回收么?

    在Linux系统中,我们经常用free命令来查看系统内存的使用状态。在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态。
    发表于 12-14 09:10 1667次阅读

    Linux查看内存命令及解释

    我们通过Linux查看内存free命令查看机器空闲内存时,会发现free的值很小。下面我们就来了解学习下Linux查看
    发表于 07-24 06:18

    Linux查看资源使用情况和性能调优常用的命令

    ,包括进程、线程、程序堆栈、内存、Swap、CPU调度、内存调度、网络连接和IO读写等。 本文介绍了Linux查看资源使用情况和性能调优常用的命令,包括top、htop、ps、
    的头像 发表于 11-12 17:54 4185次阅读

    内存的主要分类有哪些

    内存又叫内存储器和主存储器,是计算机的重要部件之一,内存条由内存芯片、电路板、金手指等部分组成。接下来简单介绍
    的头像 发表于 01-20 13:00 5.6w次阅读

    一文掌握Linux服务器监控命令

    平时我们经常需要监控内存的使用状态,常用的命令free、vmstat、top、dstat -m等。
    的头像 发表于 03-26 10:30 634次阅读

    free命令解惑及IC搬砖常用命令组合的使用方法

    日常工作中,我们常使用"free -m"查看内存使用情况。
    的头像 发表于 09-11 09:30 594次阅读

    free在释放内存的时候,为什么不需要指定内存的大小?

    malloc在申请内存的时候,需要指定内存的大小,申请成功则返回这块内存的地址,但是free的时候,只需要指定释放的内存的起始地址,系统就知
    的头像 发表于 09-15 17:05 1612次阅读
    <b class='flag-5'>free</b>在释放<b class='flag-5'>内存</b>的时候,为什么不需要指定<b class='flag-5'>内存</b>的大小?

    从软件角度看看内存

    关于内存,从软件的角度去查看,其实作为一个软件程序员,大多数对这个维度的接触还是蛮多的。linux中有个free命令,其就是查看系统内存的情况。 f
    的头像 发表于 10-30 17:41 682次阅读
    从软件角度看看<b class='flag-5'>内存</b>

    linux free命令详解

    linux free命令是一个用于查看系统内存使用情况的工具。通过free命令,我们可以获取有关系统内存
    的头像 发表于 11-08 11:20 1313次阅读

    linux free命令原理

    Linux中的 free 命令是一个用于查看系统内存使用情况的工具。它显示了系统内存的详细信息,包括总内存、已使用
    的头像 发表于 11-08 11:23 538次阅读

    内存释放free步骤

    内存释放free Public_fREe() void public_fREe (Void_t* mem) { mstate ar_ptr; mchunkptr p; /* chunk
    的头像 发表于 11-09 11:31 787次阅读

    jmap dump内存命令

    空间的详细信息的文件。通过分析堆内存快照,可以帮助我们进行内存泄漏和性能问题的定位和分析,以及优化代码和内存使用。 使用jmap dump命令生成堆
    的头像 发表于 12-05 10:38 3095次阅读

    jvm内存分析命令和工具

    介绍JVM内存分析命令和工具,并详细介绍它们的使用方法和功能。 一、JVM内存分析命令 jps
    的头像 发表于 12-05 11:07 1132次阅读

    buffers内存与cached内存的区别

    free 命令是Linux系统上查看内存使用状况最常用的工具,然而很少有人能说清楚 “buffers” 与 “cached” 之间的区别。
    的头像 发表于 07-29 14:17 463次阅读
    buffers<b class='flag-5'>内存</b>与cached<b class='flag-5'>内存</b>的区别

    内存分类有哪些

    内存作为计算机系统中至关重要的组成部分,其分类可以从多个维度进行阐述。以下将从主要类型、技术特性、应用场景等多个方面详细介绍内存分类,力求
    的头像 发表于 09-10 14:20 748次阅读