hbcbgcx 2013-07-26
Vmstat是Virtual Memory Statistics虚拟内存统计缩写:
物理内存是计算机内存的大小,从物理内存中读写数据比硬盘中读写数据要快很多,而内存是有限的,所以就有了物理内存和虚拟内存的概念。
物理内存就是硬件的内存,是真正的内存。
虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也就是交换分区。
作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的逻辑内存,内核会把暂时不用的内存块信息写到交换空间,这样物理内存就得到了释放,这块儿内存就可以用于其他目的,而需要用到这些内容的时候,这些信息就会被重新从交换分区读入物理内存。
Linux的内存管理采用的是分页存取机制,为了保证物理内存得到充分的利用,内核会在适当的时间把物理内存中不经常使用的数据块儿自动交换到虚拟内存中,而将充分使用的信息保留到物理内存中。
相关阅读:
需要主机的内存运行机制特点:
1:Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么需要内存,Linux也会交换出暂时不用的内存页面,这样的可以避免等待交换所需的时间。
2:Linux进行页面交换是有条件的,不是所有页面在不用时都交换到物理内存,Linux内核根据最近经常使用的算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。有时会看到这样的现象:Linux物理内存还有很多,但是交换空间也用了很多,这很正常。比如,有一个占用很大内存的进程运行的时候,需要耗费很多内存资源,此时有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多虚拟内存的进程结束并释放了物理内存之后,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要。
最后交换空间的页面在使用的时候,首先要被交换到物理内存中,如果没有足够的物理内存,他们又会马上被交换出去,这样,虚拟内存中没有足够空间来存储这些交换页面,导致Linux出现服务异常这些情况。
虚拟内存原理:
在内存中运行的每个进程都需要使用到内存,但是不是每个进行都需要每时每刻都使用系统分配的内存空间。但系统所需内存超过实际的物理内存,内核会释放某些进程所占用,但是未使用的部分或者所有物理内存,把这些资料存储在磁盘上,直到下一次调用,并将释放出来的内存提供给有需要的内存使用。
Linux内存管理中,通过调页paging和交换swapping来完成上述的内存调度。调页算法是吧内存中最近不常使用的页面换到磁盘中,把活动页面保留在内存中供进程使用。交换技术是吧整个进程,而不是部分页面全部交换到磁盘中。
分页写入磁盘的过程为:page-out,分页从硬盘重新回到内存的过程被称为page-in,内核需要一个分页的时候,发现此分页不再内存中,,就会发生page fault.
Vmstat字段说明:
Procs:进程,r:运行队列中进程数量,b:等待io的进程数量,
Memory内存:swpd:使用虚拟内存大小,free:可用内存大小,buff:用作缓冲的内存大小,cache:用作缓存的内存大小
Swap:si:每秒从交换区写到内存的大小,so:每秒写入交换区的大小。
IO:(现在Linux下块的大小为1024bytes)bi:每秒读取的块数,bo:每秒写入的块数。
System:in:每秒中断数,包括时钟中断。Cs:每秒上下文切换。
CPU:us:用户进程执行时间,sy,系统时间,idle空闲时间,wa,等待io时间。
查看内存使用的详细信息:vmstat –s
查看磁盘的读写命令:vmstat–d
查看磁盘的读写命令:vmstat–p /dev/sda1
Reads:来自这个分区的读得信息,read sectors:来自这个分区的读扇区的次数,writes来自这个分区的写的次数,requestedwrites:来自这个分区的写请求次数
在Linux里,内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。
虚拟内存是不会主动释放,而是再使用的时候从硬盘通过io搬运回内存中,所以在使用虚拟内存时,会发现io使用很大,而硬盘速度快慢能够觉得这个过程的快慢,同样数据库select操作也会与硬盘读取速度有关系。