如何通过free看懂内存的真实使用
之前有位同事问过Linux系统内存free命令下各参数的区别与关系,自己也没太明白,有点尴尬。今天整理一下,供了解。
free命令是Liunx操作系统中对内存进行查看和监控的一个常用命令。我们可以直接执行free命令获取操作系统内存使用的相关数据,如下所示:
[root@ufdb165 ~]# free
total used free shared buff/cache available
Mem: 63722036 2850012 5629452 16861900 55242572 43486320
Swap: 33554428 0 33554428
[root@ufdb165 ~]# free -h
total used free shared buff/cache available
Mem: 60G 2.7G 5.4G 16G 52G 41G
Swap: 31G 0B 31G
默认直接执行free获取到的内存数据的单位都是k,Mem这一行展示的是物理内存使用情况,Swap这一行展示的是内存交换区(通常也叫虚拟内存)的整体使用情况。
- tatal列:显示的是系统总的可用物理内存和交换区的大小,单位为k。
- used列:显示的是已经被使用的物理内存和交换区的大小,单位为k。
- free列:显示的是还有多少物理内存和交换区没有被使用,单位为k。
- shared列:显示的是共享区占用的物理内存大小,单位为k。
- buff/cache列:显示的是被缓冲区和page缓存合计使用的物理内存大小,单位为k。
- buff:在操作系统中指的是缓冲区,负责磁盘块设备的读写缓冲,会直接占用系统的物理内存。
- cache:指的是操作系统中的page缓存,这个缓存是Liunx内核实现的磁盘缓存,就是将磁盘中的数据缓存到物理内存中,以减少内核对磁盘I/O的读写操作,这样对磁盘的访问就会变为对物理内存的访问,从而大大提高了系统对磁盘的读写速度。cache类似于应用程序中使用redis来实现缓存一样,其实就是把一些经常需要访问的数据存储到物理内存中来提高数据访问的速度。
- available列:显示的是可用物理内存的大小,单位为k。通常情况下,avaliable的值等于free+buff/cache。Liunx内核为了提高磁盘读写的速度会使用一部分物理内存来缓存经常要使用的磁盘数据,所以buff和cache对于Linux操作系统的内核来说,都属于已经被使用的内存,而free列显示的是真正未被使用的物理内存。不过,如果物理内存不够用了并且应用程序恰巧又需要使用物理内存时,内核就会从buff和cache中回收被它们占用的物理内存来满足应用程序的需要,也就是说buff和cache占用的物理内存是可以被内核释放的。
如何通过free看懂内存的真实使用的更多相关文章
- 一文看懂JVM内存区域分布与作用
那么我们在开始介绍Java内存区域之前,我们先放一张内存区域的图,方便我们后面介绍的时候可以对照着看. 须知,本文是根据JDK8来介绍的. 程序计数器 首先它是线程私有的,它也称为代码的行号指示器,字 ...
- 看懂SqlServer查询计划【转】
原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...
- 【转载】看懂SqlServer查询计划
看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...
- 看懂SqlServer查询计划
看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...
- 看懂SqlServer查询计划 SQL语句优化分析
转自 http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 阅读目录 开始 SQL Server 查找记录的方法 SQL Ser ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...
- 看懂SqlServer执行计划
在园子看到一篇SQLServer关于查询计划的好文,激动啊,特转载.原文出自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.htm ...
- 我终于看懂了HBase,太不容易了...
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在我还不了解分布式和大数据的时候已经听说过HBa ...
- 透过源码看懂Flink核心框架的执行流程
前言 Flink是大数据处理领域最近很火的一个开源的分布式.高性能的流式处理框架,其对数据的处理可以达到毫秒级别.本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程 ...
随机推荐
- 【python】pandas 索引操作
选择.修改数据(单层索引) 推荐使用.at..iat..loc..iloc 操作 句法 结果 备注 选择列 df[col] Series 基于列名(列的标签),返回Series 用标签选择行 df.l ...
- Spring 10: AspectJ框架 + @Before前置通知
AspectJ框架 概述 AspectJ是一个优秀的面向切面编程的框架,他扩展了java语言,提供了强大的切面实现 本身是java语言开发的,可以对java语言面向切面编程进行无缝扩展 AOP常见术语 ...
- Java连接简单使用ElasticSearch
目录 1. 添加依赖 2. 代码,无账号密码 3. 代码,有账号密码,并且是https方式 4. 参考文章 1. 添加依赖 <!-- https://mvnrepository.com/arti ...
- noip2018提高组初赛试题
一.单项选择题(共 10 题,每题 2 分,共计 20 分: 每题有且仅有一个正确选项) \2. 下列属于解释执行的程序设计语言是( ). A. C B. C++ C. Pascal D. Pytho ...
- volatile 函数影响子查询提升
我们知道 volatile 函数会影响SQL的执行性能,比如:volatile 类型函数无法建函数索引.volatile 函数针对每条记录都要执行一次.本篇的例子主要讲述 volatile 类型的函数 ...
- JAVA SE 基础总结
§ 基础知识 一.程序组织与运行原理 1.1 程序组织 一个 JAVA 程序文件中主要由如下几部分构成: package 声明 public 类:public 类与类文件名相同,因为其是作为该类文件唯 ...
- AQS:Java 中悲观锁的底层实现机制
介绍 AQS AQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础.比如 各种锁:ReentrantLock.ReadWriteLock.Sta ...
- day03-代码实现02
多用户即时通讯系统03 4.编码实现02 4.2功能实现-拉取在线用户 4.2.1思路分析 客户端想要知道在线用户列表,就要向服务器发送请求(Message),因为只有服务器端保持着所有与客户端相连接 ...
- 五、frp内网穿透客户端frpc.ini各配置参数详解
[必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...
- windows系统下使用bat脚本文件设置MySQL系统环境变量
说明:在一个bat文件中设置tomcat环境变量后,不能直接使用,需要另起一个bat文件才能使用 号开头的行不要写在bat文件中 # 这个bat文件实现的功能:设置环境变量 @echo off set ...