博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS的free命令
阅读量:7012 次
发布时间:2019-06-28

本文共 2709 字,大约阅读时间需要 9 分钟。

CentOS 6及以前

 

$ free              total       used        free    shared    buffers    cachedMem:        4040360    4012200       28160         0     176628   3571348-/+ buffers/cache:      264224     3776136Swap:       4200956      12184     4188772$

 

 

内存的使用分作4部分:

  • A. 程序使用的;
  • B. 未被分配的;
  • C. Buffers (buffer cache)
  • D. Cached (page cache)

显然,A (程序使用的) 肯定是used,B (未被分配的) 肯定是free。但是,C (Buffers) 和 D (Cached) 是算作used还是算作free呢?一方面,它们已经被分配了,可以算作used;另一方面,当程序需要时,可以回收它们来使用,可以算作free。所以,怎么算都合理。这就是在free命令的output中,第一行和第二行的区别

  • 第一行(Mem):Buffers和Cached被算作used。也就是说,它的free是指 B (未被分配的);它的used是指 A + C + D;
  • 第二行(-/+ buffers/cache):Buffers和Cached被算作free。也就是说,它的used是指 A (程序使用的);它的free是指 B + C + D;行名称“-/+ buffers/cache”的含义就是“把Buffers和Cached从used减下来,加到free里”。

搞清这些之后,我们可以算出A,B,C和D各自的值:

  • A=264224
  • B=28160
  • C=176628
  • D=3571348

可见验证一下:

  • total=A + B + C + D
  • 第一行used = A + C + D
  • 第二行free  = B + C + D

 

CentOS 7

 

 

free命令的out:

total        used        free      shared  buff/cache   availableMem:        1012952      252740      158732       11108      601480      543584Swap:       1048572        5380     1043192

 

首先,C (Buffers) 和D (Cached)被和到一起,即buff/cache;

其次,used就是指A (程序使用的);free就是指B (未被分配的);

另外,CentOS 7中加入了一个available,它是什么呢?手册上是这么说的:

 

  • MemAvailable: An estimate of how much memory is available for starting new applications, without swapping.

前面说过,当程序需要时,可以回收C (Buffers)和D (Cached),那么MemAvailabe不就是B+C+D吗?当程序需要时可以回收C和D,这句话以前是正确,但是现在就不精确了:因为, 现在,C和D中不是所有的内存都可以被回收。所以,大致可以这么理解,MemAvailable = B (未被分配的) + C (Buffers) + D (Cached) - 不可回收的部分。哪些不可回收呢?共享内存段,tmpfs,ramfs等。详细的介绍如下:

 

/proc/meminfo: provide estimated available memory

Many load balancing and workload placing programs check /proc/meminfo to estimate how much free memory

is available. They generally do this by adding up "free" and "cached", which was fine ten years ago,

but is pretty much guaranteed to be wrong today.

It is wrong because Cached includes memory that is not freeable as page cache, for example shared memory

segments, tmpfs, and ramfs, and it do esnot include reclaimable slab memory, which can take up a large

fraction of system memory on mostly idle systems with lots of files.

Currently, the amount of memory that is available for a new workload,without pushing the system into swap,

can be estimated from MemFree, Active(file), Inactive(file), and SReclaimable, as well as the "low"watermarks

from /proc/zoneinfo.

However, this may change in the future, and user space really should not be expected to know kernel internals

to come up with an estimate for the amount of free memory.

It is more convenient to provide such an estimate in /proc/meminfo. If things change in the future, we only

have to change it in one place.

转载于:https://my.oschina.net/vshcxl/blog/1571307

你可能感兴趣的文章
VBPR: Visual Bayesian Personalized Ranking from Implicit Feedback-AAAI2016 -20160422
查看>>
servlet injection analysis
查看>>
(原)centos7安装和使用greenplum4.3.12(详细版)
查看>>
Hive之 hive与hadoop的联系
查看>>
java中的==、equals()、hashCode()源码分析
查看>>
HDU 3613 Best Reward 正反两次扩展KMP
查看>>
zepto.js 源码解析
查看>>
HTTP状态码大全
查看>>
使用ASP.NET Web API 2创建OData v4 终结点
查看>>
MyBatis简单的增删改查以及简单的分页查询实现
查看>>
Android快捷支付SDK Demo resultStatus={4001};memo={參数错误};result={}问题
查看>>
urllib2中自定义opener
查看>>
Hadoop快速入门
查看>>
MySql_安装及简单命令
查看>>
CSDN markdown 编辑器 第四篇 LaTex语法
查看>>
mongodb 初学 索引
查看>>
每日一小练——二项式系数加法解
查看>>
django中的setting全局变量的导入
查看>>
常见的几种Flume日志收集场景实战
查看>>
一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
查看>>