Linux基础篇之内存管理机制
1 Linux内存管理的主要特点
--------------------------------------------------------------------------------
无论物理内存多大,Linux都将其充分利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。Linux的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为cache、buffers,以此提高数据访问性能。页面高速缓存(page cache)是Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。
2 物理内存、虚拟内存
--------------------------------------------------------------------------------
物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在Linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。
Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。
Linux内存运行机制:
2.1 Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存
2.2 Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,Linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存
2.3 交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去
3 Linux内存监控
--------------------------------------------------------------------------------
free -m:
[root@rango backup_CentOS]# free -m
total used free shared buffers cached
Mem: 3805 3683 121 0 120 690
-/+ buffers/cache: 2872 932
Swap: 2041 134 1907
注解:
total: 物理内存的总大小used:已经使用的物理内存大小free:空闲的物理内存大小
shared: 多个进程共享的内存大小buffers/cached:磁盘缓存的大小
Mem: 代表物理内存使用情况(-/+buffers/cached):代表磁盘缓存使用状态
Swap: 表示交换空间内存使用状态
(-buffers/cache) used内存数:2872M(指的第一部分Mem行中的used- buffers - cached)
(+buffers/cache) free内存数: 932M (指的第一部分Mem行中的free+ buffers + cached)
从内核的角度可使用的内存:121M
从应用程序可使用的内存:free+buffers/cache=121+120+690=931M,为第二行的free值。对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高文件读取的性能,当应用程序需要用到内存的时候,buffers/cached会很快地被回收,以供应用程序使用。
Linux缓存机制:buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取。
buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及tracking in-flightpages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。
4 Linux内存释放过程
--------------------------------------------------------------------------------
4.1 free -m查看内存使用情况
4.2 sync:使用sync命令以确保文件系统的完整性,sync命令运行sync 子例程,将所有未写的系统缓冲区写到磁盘中,包含已修改的i-node、已延迟的块I/O和读写映射文件。为确保可靠起见,应执行两遍sync命令,这是因为sync命令完成时,并不保证信息实际写到了磁盘上。
4.3 修改/proc/sys/vm/drop_caches:
echo 3 > /proc/sys/vm/drop_caches
说明:
1)/proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。
2)drop_caches:
Writing to this file causes the kernel to drop cleancaches,dentries and inodes from memory, causing that memory tobecomefree.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 >/proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3>/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects arenot freeable, the user should run syncfirst.