专栏首页zingpLiuLinux内存信息查看——free命令

Linux内存信息查看——free命令

  free 命令可以显示系统已用和空闲的内存情况。包括物理内存、交互区内存(swap)和内核缓冲区内存(buffer)。共享内存将被忽略。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

1 用法及常用参数

free [option] 

-b  # 以Byte为单位显示内存使用情况
-k  # 以KB为单位显示内存使用情况 
-m  # 以MB为单位显示内存使用情况
-g   # 以GB为单位显示内存使用情况
-h   # 自动转换单位(最常用)
-o  # 不显示缓冲区调节列 
-s <间隔秒数>  # 持续观察内存使用状况 
-t  # 显示内存总和列 
-V  # 显示版本信息 

2 命令输出的结果详解

在终端输入free。结果如下:

[@bjzw_106_203 ~]# free
             total       used       free     shared    buffers     cached
Mem:       8182340    7909480     272860          0     463820    5228244
-/+ buffers/cache:    2217416    5964924
Swap:      1048568       2612    1045956

Mem :表示物理内存的统计(系统已使用、空闲的内存)。

-/+ buffers/cache: 应用程序已使用的、空闲的物理内存。

Swap:交换分区的内存统计。

total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:多个进程共享的内存总额。 buffers:系统分配但未被使用的buffers 数量。 cached:系统分配但未被使用的cache 数量。

强调一下buffers和cached的区别:

  对于应用程序来说:buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。可用内存=系统free memory+buffers+cached。

buffers:是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages。也就是说,buffers是用来存储,目录里面有什么内容,权限等等。 cached:直接用来记忆我们打开的文件,是用来给文件做缓冲的。

综上所述,

  对操作系统来讲是:Mem的参数buffers/cached 都是属于被使用,所以它认为free只有272860;   对应用程序来讲是:(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。以应用来看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了。

3 说说Swap

当可用内存少于额定值的时候,就会开会进行交换。额定值被定义在/proc/meminfo 这个文件。

[@bjzw_106_203 ~]# cat /proc/meminfo
MemTotal:      8182340 kB
MemFree:        346672 kB
Buffers:        463956 kB
Cached:        5156992 kB
SwapCached:          0 kB
Active:        3027644 kB
Inactive:      4170020 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      8182340 kB
LowFree:        346672 kB
SwapTotal:     1048568 kB
SwapFree:      1045956 kB
Dirty:              48 kB
Writeback:           0 kB
AnonPages:     1576704 kB
Mapped:          23552 kB
Slab:           422056 kB
PageTables:     164404 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   5139736 kB
Committed_AS:  5433220 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      1260 kB
VmallocChunk: 34359720023 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

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

(1) 减少缓冲与页面cache的大小; (2) 将系统V类型的内存页面交换出去;  (3) 换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 少量地使用swap是不会影响到系统性能的。

  追踪Linux系统的内存使用一直是个难题,很多人试着把能想到的各种内存消耗都加在一起,kernel text、kernel modules、buffer、cache、slab、page table、process RSS…等等,却总是与物理内存的大小对不上,这是为什么呢?因为Linux kernel并没有滴水不漏地统计所有的内存分配,kernel动态分配的内存中就有一部分没有计入/proc/meminfo中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hadoop伪分布式搭建

    用户1432189
  • TensorFlow中使用GPU

    TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存;如果指定了某块GPU,也会默认一次性占用该GPU的所有显存。可以通过以下方式解决:

    用户1432189
  • 面向对象(三)【类的特殊成员及高级特性】

    前面两篇文章介绍了类与对象的基本概念和类中的一些成员,本篇主要介绍类和对象的特殊成员及一些高级特性。

    用户1432189
  • zephyr笔记 2.3.1 Memmory Slabs

    memory slab 是一个内核对象,它允许从指定的内存区域动态分配内存块。 memory slab 中的所有内存块都有一个固定大小,可以高效地分配和释放它们...

    twowinter
  • 【并发编程】一文带你读懂深入理解Java内存模型(面试版本)

    主线如上图红色箭头,大家可以先看看整体讲的是什么。java内存模型前面是铺垫,后面是相关内容。

    java进阶架构师
  • Spark 1.6以后的内存管理机制

       Spark的内存管理自从1.6开始改变。老的内存管理实现自自staticMemoryManager类,然而现在它被称之为”legacy”. “Legacy...

    用户3003813
  • RedHat Linux服务器安全配置细节

    云豆贴心提醒,本文阅读时间8分钟 1.概述 Linux服务器版本:RedHat Linux AS 2.1 对于开放式的操作系统---Linux,系统的安全设...

    小小科
  • Spring Boot引起的“堆外内存泄漏”排查及经验总结

    为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫...

    美团技术团队
  • 内存溢出和内存泄漏的区别

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了...

    用户6182664
  • R语言内存的管理

    R语言中内存是我们平时不怎么注意的一个方面,但是R语言的内存占有率还是很高的。尤其是在对大型数据的处理过程中,每当你复制你的变量或者创建新的变量都会占用新的内存...

    一粒沙

扫码关注云+社区

领取腾讯云代金券