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:
-/+ buffers/cache:
Swap:

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: kB
MemFree: kB
Buffers: kB
Cached: kB
SwapCached: kB
Active: kB
Inactive: kB
HighTotal: kB
HighFree: kB
LowTotal: kB
LowFree: kB
SwapTotal: kB
SwapFree: kB
Dirty: kB
Writeback: kB
AnonPages: kB
Mapped: kB
Slab: kB
PageTables: kB
NFS_Unstable: kB
Bounce: kB
CommitLimit: kB
Committed_AS: kB
VmallocTotal: kB
VmallocUsed: kB
VmallocChunk: kB
HugePages_Total:
HugePages_Free:
HugePages_Rsvd:
Hugepagesize: 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中。

Linux内存信息查看——free命令的更多相关文章

  1. Linux硬件信息查看

    more /proc/cpuinfo more /proc/meminfo more /proc/*info lspci 查看主板信息等cat /proc/cpuinfo CPU信息cat /proc ...

  2. Linux学习之查看系统资源命令总结(二十二)

    Linux系统之查看系统资源总结 . 转载:http://lxbins.blog.51cto.com/1089997/283663 top命令:监控系统 top 主要参数 d:指定更新的间隔,以秒计算 ...

  3. 利用Volatility对Linux内存取证分析-常用命令翻译

    命令翻译 linux_apihooks - 检查用户名apihooks linux_arp - 打印ARP表 linux_aslr_shift - 自动检测Linux aslr改变 linux_ban ...

  4. Linux 内存分析工具——free命令

    在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍 free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及 ...

  5. Linux 内存分析工具的命令大全介绍

    在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍# free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存, ...

  6. 分享一款高逼格的Linux磁盘信息查看工具

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 可以使用df命令来显示在Linux.macOS和类Unix系统中挂载的文件系统上有多少可用磁盘 ...

  7. Linux Tomcat日志查看实用命令

    实用命令: 查看tomcat运行日志 tail -f catalina.out 通过关键字搜索查看日志 cat jeewx-2015-09-20.log | grep 验证码 查看固定时间日志 cat ...

  8. linux服务器硬件信息查看

    1.linux 查看服务器序列号(S/N) [root@oss20hb106 ~]# dmidecode -t 1 # dmidecode 2.11 # SMBIOS entry point at 0 ...

  9. Linux: 信息查看

    Linux log日志查看  http://www.2cto.com/os/201307/227230.html

随机推荐

  1. bootstrap collaspe

    和modal类似:也是通过data-toggle, data-target来指定: 可以把折叠插件改为手风琴,如果指定data-parent,那这个data-parent元素下的折叠插件就会像手风琴一 ...

  2. sqlserver 实现数据变动触发信息

    1.建立存储过程,功能是动态写入文件中信息,可以在触发器或存储过程调用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create proc [d ...

  3. Android-上下文菜单Menu

    上一篇博客介绍了,Android-普通菜单Menu,而这篇博客介绍Android-上下文菜单Menu AndroidManifest.xml 中加入权限: <!-- 读取联系人数据的权限 --& ...

  4. asp.net 网站监控方案

    前言:监控web网站方法有很多种,这篇文章说一下对windows服务器 asp.net网站的监控 采用的方案,Powershell + Influxdb + Grafana 1.PowerShell ...

  5. C#线程运用基础

    ThreadStart ts=new ThreadStart(a.f);//ThreadStart 是一个委托,用以关联a.f方法Thread th=new Thread (ts);//Thread是 ...

  6. Angular6 学习笔记——内容投影, ViewChild和ContentChild

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  7. winform程序更新

    更新程序和主程序是分开的,得在做一个exe可执行更新程序. 主程序在登陆时判断是否需要更新. 我这边判断方式是直接在配置文件里面设置版本号,然后和服务器上面的版本对比,低于服务器版本就更新程序. // ...

  8. AOP面向切面的基石——动态代理(一)

    其实动态代理在Java里不是什么新技术了,早在java 1.2之后便通过 java.lang.reflect.InvocationHandler 加入了动态代理机制. 下面例子中,LancerEvol ...

  9. python 神经网络包 NeuroLab

    neurolab模块相当于Matlab的神经网络工具箱(NNT) neurolab模块支持的网络类型: 单层感知机(single layer perceptron) 多层前馈感知机(Multilaye ...

  10. 通过网站统计或系统监视器查看IIS并发连接数

    如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数;如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带 ...