free 命令的一些说明

free命令用了很久了,但是知其然有些不知其所以然。今天为了追查一个内存泄漏问题,特意去仔细研究了一下。

一般来说,该命令输出如下:

             total       used       free     shared    buffers     cached
Mem:       2059500    2042852      16648          0      26708     303484
-/+ buffers/cache:    1712660     346840
Swap:      2064376     684460    1379916
 

先解释一下字段:

  • Total: 总可用物理内存数。linux内核会占去一部分。
  • Used: 已经使用内存数。更加确切地说,应该是含有数据的内存数。
  • Free:空余内存数。更加确切地说,是没有数据空的内存数。
  • Shared: 共享内存数。被多个应用(进程)共享的内存。
  • Buffers:这个其实是写入用的缓存。这里涉及到linux的I/O策略。 一些数据暂时写入内存中,而不直接写到硬盘上。当做flush操作的时候,再把数据写入硬盘。写入以后,Buffer是可以释放的。因此Buffer其实是一种可以供征集的内存。
  • Cached: 提供读取操作用的缓存。 依然是涉及到I/O策略。预先读取的数据,如果暂时不使用,就先缓存在内存中供以后读取调用(如果内存有空闲)。Cached也是可以随时释放的。且比Buffer更加容易征集。

由此可知,Cached和Buffered都是可用内存。

因此,真正使用的内存,实质是Used - Cached - Buffers. 

实际可用空余内存是free + Cached + Buffers. 

猜你喜欢

转载自allenzhang.iteye.com/blog/1462761