在使用 linux 的时候,我们经常发现系统的空闲内存差不多总是被用完了。
我们可以通过 top 和 free 查看内存使用情况
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倍)。