通过 free 命令理解 linux 内存管理

897 阅读2分钟

centos7上输入 free -m 命令(按兆为单位显示内存使用情况)

虚拟内存 = 物理内存+交换机

total:物理内存大小,就是机器实际的内存
used:已使用的内存大小,这个值包括了 cached 和 应用程序实际使用的内存
free:未被使用的内存大小
shared:共享内存大小,是进程间通信的一种方式
buffers:被缓冲区占用的内存大小
cached:被缓存占用的内存大小
available:可用内存 total = used + free + buff/cache
buff/cache = buffers + cache

cache:缓存,系统读取文件时,从硬盘读取数据到内存中,这个过程比较耗时,为了提高效率,每次把读取的数据在内存中缓存下来,下次再次读取的时候就可以从缓存中读取,所以有大量读文件操作时,内存的使用率就会上升。
如果其他程序使用要使用内存的时候,linux 也会把这些没人使用的 cache 释放掉,给其他运行的程序使用。当然你也可以手动去释放掉这部分内存:
To free pagecache: echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches\

buffer:考虑到从内存写文件到磁盘时速度太慢,所以先将要写入文件的数据写到buffer(内存)中,然后硬盘可以在后台慢慢读出 buffer 中的数据,保存起来。这样就提高了读写的效率。手动来 flush buffer 的内容,使用的命令是 sync

swap:交换区,linux把硬盘上的一部分空间当做内存使用,物理内存不足时(达到规定的阀值),linux会将一部分物理内存放到swap中

若文件比内存大,会出现不断淘汰内存的过程;