free 查看内存使用情况

默认kb

vagrant@precise64:~$ free
             total       used       free     shared    buffers     cached
Mem:        374256     330952      43304          0      14400     238128
-/+ buffers/cache:      78424     295832
Swap:       786428       2224     784204

修改单位为M

root@precise64:/home/vagrant/test# free -m
             total       used       free     shared    buffers     cached
Mem:           365         69        295          0          0          5
-/+ buffers/cache:         64        301
Swap:          767          2        765
  • total:物理内存大小,就是机器实际的内存
  • used:已使用的内存大小,这个值包括了 cached 和 应用程序实际使用的内存
  • free:未被使用的内存大小
  • shared:共享内存大小,是进程间通信的一种方式
  • buffers:被缓冲区占用的内存大小,后面会详细介绍
  • cached:被缓存占用的内存大小,后面会详细介绍

其中有

  • total = used + free

下面一行,代表应用程序实际使用的内存:

  • 前一个值表示 - buffers/cached,即 used - buffers/cached,表示应用程序实际使用的内存
  • 后一个值表示 + buffers/cached,即 free + buffers/cached,表示理论上都可以被使用的内存

不难看出来,这两个值加起来也是 total。
第三行表示 swap 的使用情况:总量、使用的和未使用的。

cache

cache 就是缓存的意思。当系统读文件的时候,都是把数据从硬盘读到内存里,因为硬盘比内存慢很多,所以这个过程会很耗时。为了提高效率,linux 会把读进来的文件在内存中缓存下来(因为读取相近部分的内容是程序很常见的情况),即使程序结束,cache 也不会被自动释放。所以呢,如果有程序进行大量的读文件操作,你会发现内存使用率就上去了。

不过也不用担心,如果其他程序使用要使用内存的时候,linux 也会把这些没人使用的 cache 释放掉,给其他运行的程序使用。当然你也可以手动去释放掉这部分内存:

echo 1 > /proc/sys/vm/drop_caches

buffer

buffer 的意思和 cache 相近,不过稍有区别。考虑内存写文件到硬盘的过程,因为硬盘太慢了,如果内存要等待数据写完之后才继续后面的操作,实在是效率很低的事情,也会影响程序的运行速度。所以就有了 buffer,写到硬盘的数据会放到 buffer 里面,内存很快把数据写到 buffer,可以继续其他的工作,而硬盘可以在后台慢慢读出 buffer 中的数据,保存起来。这样就提高了读写的效率!

讲一个大家会经常遇到的例子,当我们把电脑里中的文件拷贝到 U 盘的时候,如果文件特别大,大家会遇到这种情况:明明看到文件已经拷贝完了,但系统还是会提示 U 盘正在使用中。这就是 buffer 的原因,拷贝程序把东西放到 buffer 之后,但是 U 盘还没有写完。

同样的,可以手动来 flush buffer 的内容,使用的命令是sync

swap

swap 是实现虚拟内存的重要概念。如果系统的负载太大,内存被用完,可能会出现严重的问题。swap 就是把硬盘上一部分空间当做内存使用,正在运行程序会使用物理内存,把没有正在使用的内存放到硬盘,这叫做 swap out;而把硬盘 swap 部分的内存重新放到物理内存中,叫做 swap in。

swap 可以再逻辑上扩大内存空间,但是会造成系统变慢,因为硬盘读写速度很慢。linux 系统比较智能,会把那些不怎么频繁使用的内存放到 swap。

【1】http://cizixs.com/2015/10/01/linux-memory-management-through-free

你可能感兴趣的:(free 查看内存使用情况)