zoukankan      html  css  js  c++  java
  • linux下使用free命令查看实际内存占用(可用内存)

    转:http://blog.is36.com/linux_free_command_for_memory/

     

    linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位)。而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内存有如下几个加减法:

    • used=total-free  total=used+free
    • 实际内存占用:used-buffers-cached 即 total-free-buffers-cached
    • 实际可用内存:buffers+cached+free

                       total       used       free     shared    buffers     cached
    Mem:            128        119           8          0            1               22
    -/+ buffers/cache:        95          32
    swap:          255            0         255

     

    第1行Mem数据:

    • total 内存总数: 128
    • used 已经使用的内存数: 119
    • free 空闲的内存数: 8
    • shared 当前已经废弃不用,总是0
    • buffers Buffer Cache内存数: 1
    • cached Page Cache内存数: 22

    第2行-/+ buffers/cache:

    • -buffers/cache 的内存数:95 (等于第1行的 used - buffers - cached)
    • +buffers/cache 的内存数: 32 (等于第1行的 free + buffers + cached)

    可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

    第三行数据是交换分区SWAP的,也就是我们通常所说的虚拟内存。

    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

    感兴趣的可以进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,比如procps-3.2.3-5.3.src.rpm。

     

    系统管理员必须维护他们服务器的健康运行。其中一个重要的部分就是内存。当服务器内存使用率过高时,它会降低服务器的性能。Linux有一个称为 free 的工具,来监控内存使用率。

    free 命令是什么

    free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。

    如何运行 free

    想要运行,只需在控制台输入free 即可。不带选项运行会显示一个以KB为单位的默认输出。

    $ free
    

    free默认视图

    从上面的截图我们看到:

    内存 (以KB计)

    • Total(全部) : 1026740
    • Used(已用) : 843396
    • Free(可用) : 183344
    • Shared(共享) : 0
    • Buffers(块设备缓存区) : 52704
    • Cached(文件缓存) : 376384

    译注:关于Buffers和Cached的区别,来自 http://www.taobaotesting.com/blogs/qa?bid=2265 的一段解释如下:

    buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.

    cached是用来给文件做缓冲。

    那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件

    Swap (以KB计)

    • Total(全部) : 1045500
    • Used(已用) : 3376
    • Free(可用) : 1042124

    当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低,说明内存需要升级了。这意味这内存利用率很高。请注意 shared(共享)内存列应该被忽略 ,因为它已经被废弃了。

    以其它单元显示内存信息

    如我们先前提到的,默认 free 会以 KB 为单位显示信息。free 同样提供给我们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以 MB 为单位的输出样例。

    $ free -m
    

    free命令以MB为单位

    这个技巧同样适用于-b, -k, -g 以及 –tera 选项。

    以适于人类可读方式显示内存信息

    free 同样提供了-h选项,这意味着适于人类可读(译注:系统上可能并不存在-h选项,已被-m取代)。那么这与其它的选项有什么不同呢,如-m(MB)选项? 可见的最大不同是-h选项会在数字后面加上适于人类可读的单位。让我们看一个例子。

    $ free -h
    

    人类可读的free

    如我们一起看到的,在1,0数字后这里是G(GB)字母。当数字并没有达到GB时,free足够聪明来知道并在每个数字后面跟上合适的单位。后面的M - 数字929告诉我们它有929MB(译注: 原文为929 number tell us its 969 Megabytes,这里应该为输入错误)。

    间隔显示 free

    作为一个状态检查工具,最好的统计内存利用率的方法是使用延迟间隔。这么做的话,我们可以使用-s选项后面跟上我们想要间隔的N秒数。我们可以在后面合并几个选项来使输出满足我们的需求。假如我们想要每3秒统计一次内存利用率并且适于人类可读,那么就像这样做:

    $ free -hs 3
    

    间隔3s显示free

    显示高低内存利用率

    如果我们想要知道高低内存统计,我们可以使用-l选项。下面是一个例子。

    $ free -l
    

    Free 的 低-高 统计

    显示 Linux 全部内存

    如果我们需要每列的总计信息,我们可以在 free 命令后面跟上 -t 选项。这会在字底部额外加入一行显示。

    $ free -t
    

    free命令带总计内存

    总结

    除了vmstat以外,free 命令也是一个用于统计内存利用率的简单统计工具。用这个你可以快速查看你的 Linux 内存信息。free 命令使用 /proc/meminfo 作为基准来显示内存利用率信息。如往常一样,你可以在控制台下输入 man free 来获取更多关于 free 的信息。

    前段时间有个项目的用C写的,性能测试时发现内存泄露问题。关于怎么观察内存使用问题,free是很好用的一个命令。

    bash-3.00$ free

    total       used       free     shared    buffers     cached

    Mem:       1572988    1509260      63728          0      62800     277888

    -/+ buffers/cache:    1168572     404416

    Swap:      2096472      16628    2079844

    Mem:表示物理内存统计

    -/+ buffers/cached:表示物理内存的缓存统计

    Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。

    系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。

    第1行 Mem: total:表示物理内存总量。

    used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

    free:未被分配的内存。

    shared:共享内存,一般系统不会用到,这里也不讨论。

    buffers:系统分配但未被使用的buffers 数量。

    cached:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 total = used + free 第2行 -/+ buffers/cached: used:也就是第一行中的used - buffers-cached 也是实际使用的内存总量。 

    free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行

    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 第3行: 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.

    接下来解释什么时候内存会被交换,以及按什么方交换。

    当可用内存少于额定值的时候,就会开会进行交换.

    如何看额定值(RHEL4.0):

    #cat /proc/meminfo

    交换将通过三个途径来减少系统中使用的物理页面的个数:

    1.减少缓冲与页面cache的大小,

    2.将系统V类型的内存页面交换出去,

    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。

    事实上,少量地使用swap是不是影响到系统性能的。

    下面是buffers与cached的区别。

    buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.

    cached是用来给文件做缓冲。

    那就是说:buffers是用来存储,目录里面有什么内容,权限等等。

    而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

    实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。

    #free

    #man X

    #free

    #man X

    #free

    你可以先后比较一下free后显示buffers的大小。

    另一个实验:

    #free

    #ls /dev

    #free

    你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。

    因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)

    使用free命令

    将used的值减去   buffer和cache的值就是你当前真实内存使用 ————– 对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有16936.

    应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。 所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于 VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。 前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的.不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换 文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换 空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看 内存是否够用的标准哦.

  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3315124.html
Copyright © 2011-2022 走看看