Linux-内存管理
1、内存的基本概念
物理内存总是有限的,linux中引入了虚拟内存的概念。物理内存是系统硬件提供的内存的大小,是进程真实活动使用的内存。虚拟内存则是为了弥补物理内存的不足而提出的策略,它是利用磁盘空间虚拟出一块内存区域,将暂时用不到的内存块信息写入到虚拟内存中,用作虚拟内存的磁盘空间成为交换空间(swap space)。
作为物理内存的扩展,系统会将暂时不用的内存块数据写入到虚拟内存中,当需要这部分数据的时候再就从虚拟内存中调度取,而经常使用的信息保留在内存中。这样空余的物理内存就可以进行其他的数据存储。Linux采取的是分页存取机制。
Note:需要注意一下几个点:
1、系统会不时的进行页面交换操作,以保持尽可能多的物理内存。即使并没有什么事情需要内存,系统还是会将暂时不用的内存页面换出,这样就可以避免等待交换的时间,提高系统的效率。
2、进行页面交换是有条件的,也就是如何决定一个页面该不该被调换到虚拟内存中??在《操作系统》中大家可能了解到有很多的算法被提出来,包括先进先出、基于优先级、最近最经常使用等算法。我们经常可以碰到一种现象:及时物理内存占用不高,但是交换空间占用比较高。这种在一定条件是合理的。两者的大小关系并没有直接的关系。可能一个进程占用了大量物理内存,途中交换到了虚拟内存大量页面,进程执行完毕后物理进程被清理,但是虚拟内存还没来得及清理。
3、交换空间的页面被调取到物理内存时,如果没有足够的空间,那么物理空间还会调换出部分页的数据到虚拟内存,如果此时虚拟内存没有空间了,那么linux可能会出现假死机、服务异常等状况,但是过段时间后将会恢复正常。因此合理的设置交换区(虚拟内存)的大小至关重要!
2、有关一些常用地命令
查看内存的使用情况:free
1)从内核的角度查看内存使用情况
1899384 KB - 511088 KB = 1388296 KB,当时这个空闲的free量并不包含缓存和缓冲区的大小;
2)从应用程序的角度查看内存的使用情况
21912 KB + 187628 KB + 1388296 KB = 1597836 KB。也就是应用程序可用的内存为剩余的free+缓冲区buffer+缓存cache的总和量。
3)缓冲区buffer和缓存cache的异同
如果有大量的数据进行存取操作,不管是从磁盘到内存还是从内存到磁盘,两者由于硬件速度的差异,将会导致系统性能的下降,因此在llinux中引入了缓冲区buffer和缓存cache的概念。两者的具体使用和概念不同。
缓冲区是用来缓冲块设备的,它只记录文件系统的元数据(metadata)以及跟踪瞬时页面(tracking in-flight pages),而缓存用来给文件做缓冲。通俗一点说:缓冲区主要用来存放目录里面有什么内容,文件的属性以及权限等。而缓存直接用来记忆打开过的文件和程序。
比如:用vi打开一个比较大的文件,第一次打开比较慢,第二次打开就比较快了,用到了缓存cache;查询大量文件时,第一次比较慢,而第二次则比较快,用到了缓冲区buffer。
3、交换空间的使用
1)创建交换空间(只是创建一个空的空间来使用):
2)**交换空间
3)使用交换空间
可以看到交换空间增多,但是如果此时重启机器,交换空间将会恢复原始状态。需要将系统的配置文件修改才可以永久的保持这个交换空间有效。具体的文件为/etc/fstab,所有的交换空间文件均是在此定义的。如果需要删除挂载的文件,只需要运行:
/sbin/swapoff /data/swapfile
4、查看进程占用的内存
后续补充