Linux 的内存管理机制

在使用 linux 的时候,我们经常发现系统的空闲内存差不多总是被用完了。

我们可以通过 top 和 free 查看内存使用情况

1

Windows 和 linux 的 内存分配区别

但是,事实真的是内存被用完了吗,要了解这个问题,我们需要了解 linux 的内存分配管理机制,在 linux 中为了充分发挥和利益可用的内存空间,linux 会把一些程序调用过的硬盘数据写入内存,利用内存的读写高速的特性提高 linux 系统的数据访问性能。这恰恰是 linux 内存管理的高明之处。

那么我们看下 Windows,Windows 操作系统的内存是只有当使用的时候,才会分配内存,这就导致你有4个 g 内存,但是实际只用了2个 g,而剩下的2个 g 就一直处于空闲状态,而linux 则将所有的内存都利用起来。

linux 的这个特性,主要是把物理内存划分出一部分的空间,我们称作 cache/buffers,以此来提高数据的访问性能,页面的缓存(cahce)是 linux 内核实现的一种主要磁盘缓存。主要用来减少对磁盘 I/O 的操作。

fwj@ubuntu:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G         63M        1.3G        8.5M        531M        1.7G
Swap:          2.0G          0B        2.0G

free 可以查看 当前的内存使用情况

纵向的

  • total 表示内存总大小
  • used 表示已使用的物理内存大小
  • free 表示空闲的内存大小
  • shared 表示多个进程共享的内存大小
  • buffers/cached 表示磁盘缓存的大小

横向的 第一行 men 表示物理内存 第二行表示 swap 交换分区的使用情况。

使用-s参数我们可以指定每3秒显示一次知道你退出终端,加上-c参数设置多少次退出。

$ free -s 3 -c 5
             total       used       free     shared    buffers     cached
Mem:       1018332     588736     429596        608     101768     192548
-/+ buffers/cache:     294420     723912
Swap:            0          0          0

             total       used       free     shared    buffers     cached
Mem:       1018332     588752     429580        608     101768     192548
-/+ buffers/cache:     294436     723896
Swap:            0          0          0

显示最高和最低的内存使用情况

$ free -l
             total       used       free     shared    buffers     cached
Mem:       1018332     590908     427424        608     101852     192596
Low:       1018332     590908     427424
High:            0          0          0
-/+ buffers/cache:     296460     721872
Swap:            0          0          0


## 虚拟内存

Windows 也有虚拟内存的概念,而在 linux 中,叫 swap---交换分区,我们都知道物理内存就是真实的内存条上标识的硬件,那么虚拟内存是为了满足物理内存不足的情况而设计的,它其实是利用磁盘空间虚拟出来的一块逻辑内存,作为物理内存的扩展,操作系统会在物理内存不足的时候使用交换分区的虚拟内存,内核暂时不会用内存信息写到交换空间,从而保证物理内存的空间得到释放,

通常 swap 的大小设置的是(物理内存大小X2倍)。