zoukankan      html  css  js  c++  java
  • Linux上的free命令简介

    每次使用free时都比较迷惑,对于上面的内容一直都不是很清楚,今天仔细查了以下,和大家一起分享以下: 

    先看一下free的运行结果:

    这里写图片描述

    free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘虚拟的内存,就是这里的Swap,相信装过Linux系统的同学肯定不陌生交换分区,这里Swap大小就是我们分区的时候分配的大小。 
    下面来分别解释以下每个列的意思:

    total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!
    userd:当前已使用的内存总量。
    free:空闲的或可以使用的内存总量
    shared:共享内存大小,主要用于进程间通信
    buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。
    cache:主要用于文件内容缓冲
    available:可以使用的内存总量

    buffers与cached的区别:

    对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
    所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
    buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages,cached是用来给文件做缓冲。
    那就是说:buffers是用来存储,目录里面有什么内容,权限等等,而cached直接用来记忆我们打开的文件的。
    关于为什么需要缓冲,这里简单解释以下:我们知道,在CPU,内存,外存的运行速度之间,存在这样的关系:
    CPU比内存快100倍,内存比磁盘快十万倍,且他们之间的差距还在增大!
    因此为了协调他们速度之间的不匹配,缓存就由此而生,在CPU内部的缓存,为了协调CPU和内存之间速度的不匹配,而内存的产生也是为了协调磁盘和CPU速度的不匹配。有个这样的一个形象的描述:把CPU的一个时钟周期看作一秒。那么,从L1 cache(CPU的一级缓存)读取信息就好像是拿起桌上的一张草稿纸(3秒);从L2 cache(CPU的二级缓存)读取信息则是从身边的书架上取出一本书(14秒);而从主存中读取信息则相当于走到办公楼下去买个零食(4分钟),而等待硬盘寻道的时间相当于离开办公大楼并开始长达一年零三个月的环球旅行,而这仅仅是寻道时间!

    free的详细使用方法

    语  法: free [-hbkmotV][-s <间隔秒数>]
    
    补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
    
    参  数:
    -b  以Byte为单位显示内存使用情况。
    -k  以KB为单位显示内存使用情况。
    -m  以MB为单位显示内存使用情况。
    -h   以比较人性化的方式显示内存使用情况。
    -o  不显示缓冲区调节列。
    -s   <间隔秒数>  持续观察内存使用状况。
    -t  显示内存总和列。
    -V  显示版本信息。   

    free的实现方式

    关于free的实现,其实是调用linux下的/proc/meminfo文件
    可以对比一下:
    zhoupan@Lenovo-G485:~$ free
                  total        used        free      shared  buff/cache   available
    Mem:        3636688     2286620      240768       79560     1109300     1210716
    Swap:       1998844           0     1998844
    zhoupan@Lenovo-G485:~$ cat /proc/meminfo 
    MemTotal:        3636688 kB
    MemFree:          239996 kB
    MemAvailable:    1209972 kB
    Buffers:           96424 kB
    Cached:           912480 kB
    SwapCached:            0 kB
    Active:          2535176 kB
    Inactive:         646160 kB
    Active(anon):    2174012 kB
    Inactive(anon):    77972 kB
    Active(file):     361164 kB
    Inactive(file):   568188 kB
    Unevictable:         448 kB
    Mlocked:             448 kB
    SwapTotal:       1998844 kB
    SwapFree:        1998844 kB
    Dirty:                60 kB
    Writeback:             0 kB
    AnonPages:       2172872 kB
    Mapped:           397968 kB
    Shmem:             79560 kB
    Slab:             100424 kB
    SReclaimable:      68764 kB
    SUnreclaim:        31660 kB
    KernelStack:        8896 kB
    PageTables:        42788 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:     3817188 kB
    Committed_AS:    6151536 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:           0 kB
    VmallocChunk:          0 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:   1112064 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:      175872 kB
    DirectMap2M:     3602432 kB
    DirectMap1G:           0 kB
    >>由于系统在高速的运转,可能存在部分数据不相同

     

     
     
  • 相关阅读:
    cmake常用工程示例大集合
    qt---cdb(Microsoft Console Debugger)调试
    Qt Creator设置多核编译(-j8参数)
    这都是些老观点了。世界在变,时代在变。中国人观念进步的更快
    微软全球执行副总裁沈向洋:三年内用人工智能赚100亿美元
    C# 6.0
    node.js + mongodb
    分布式消息系统kafka
    jQuery插件开发
    jqgrid-asp.net-mvc
  • 原文地址:https://www.cnblogs.com/williamjie/p/9233867.html
Copyright © 2011-2022 走看看