用free监控内存free是监控linux内存使用状况最常用的指令,看下面的一个输出
Mem:表示物理内存统计
buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况.只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap
Mem 行(第一行)数据说明:
Total:单位kb 表示物理内存总大小.
Used:单位kb表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用
Free:单位kb表示未被分配的内存
Shared:单位kb共享内存,一般系统不会用到Buffers:124212KB 系统分配但未被使用的buffers 数量
Cached:单位kb系统分配但未被使用的cache 数量-/+ buffers/cache 行(第二行)数据说明:
Used:单位kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量.
Free:单位kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。Free命令输出的第四行(Swap)这行显示交换内存的总量、已使用量、空闲量通常 buffer 和 cache 可以使用的内存空间越大,系统 IO 和 文件系统访问的性能越好。
在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过的数据会比较快.
一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存
虚拟内存Linux kernel使用虚拟内存机制来利用磁盘对内存的空间进行扩展。Kernel将暂时不用的内存写入到磁盘从而释放出更多的可用内存. 当这些数据再次被使用时,会被重新加载到内存当中。作虚拟内存的磁盘空间被称作swap space。对硬盘的读写,相对于内存来说速度要慢许多,因此使用了虚拟内存的程序,速度也会相应变慢 。虚拟内存的使用,往往被认为是内存出现瓶颈的标志。
内存分页(Memory Paging)和内存交换(Memory swapping)
Memory paging 是一个定时将内存数据同步回磁盘的过程当系统内存不足时,系统会将最近最不常用的内存段交换到交换空间,出现page out;当程序要读的文件在内存中没有找到,这时候出现page fault从磁盘中读取到内存,其实也产生了page inpaging指的是以页为单位的交换,而swapping指的是以整个进程为单位的交换。
swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。free列表示当前空闲的物理内存数量(以k为单位)
buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。
cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。
si列表示由磁盘调入内存,也就是内存进入内存交换区的数量
so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。
Vmstat-swap有人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
Kswapd 服务职责就是保证可用内存量。!它会监控内核里面定义的pages_high和pages_low水位线.如果可用内存量低于pages_low,kswapd进程开始扫描尝试释放,每次释放32页直到可用内存高于pages_high水位线。内核线程kswapd仍然和以前一样,用来处理页面的交换,它可以在内存不足时,将一些进程的页面交换到swap空间之中。而新的算法中,kswapd在可用页面数量小于pages_low时,以及经过了某一段时间时,才被激活。采取新的方法,显然需要激活kswapd的次数被大大减少。而且只在内存空间不够时,才请求进行页面交换,从理论上来说,也更加合理。
Kswapd回收内存的算法被称作Page Frame Reclaim Algorithm内存的回收采用LRU策略,最近不被经常使用的内存页,应该首先被回收swap空间被使用是否意味着出现了内存瓶颈?swap空间被利用恰恰说明了Linux的内存使用的合理性,并不能表示内存出现了瓶颈对Swap空间的换入换出的速率是表征内存出现瓶颈的重要标志。
在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上。
少量的可用内存free memory是一个好兆头,高速缓存有效地使用,除非持续写入到交换设备和磁盘。如果系统报告交换设备比较繁忙,这意味着系统内存不足了。很少的swap且这时如果空闲物理内存很少是一个很好的信号;说明充分利用了内存缓存,虽然内存现在不是很贵,当然能用加机器解决的问题也不是什么问题,但是“能省则省”,不要加“无用的”内存。
每周一句:|先改变行为,再改变思维。生命中的贵人都是改变你行为的人,然后你自己的思维也变了。
领取专属 10元无门槛券
私享最新 技术干货