虚拟内存以页的方式管理,一般为4K,如果配置了大页,则为2M

The Page Frame Reclaim Algorithm.(PFRA)

PFRA根据页的类型来释放内存。

页类型:

  • 不能释放的页:加锁的页,内核页,保留的页
  • 可交换的页:匿名内存页
  • 同步的页:有对应磁盘文件的页
  • 可废弃的页:static pages discarded pages
  • 除了第一种页不能回收,其它都可以被PFRA回收。

PFRA主要由两种机制:

  • kswaped内核线程
  • pdflush内核线程

kswapd

kswapd守护线程的功能是保证有足够多的空闲内存可用。当当前系统的可用内存低于pages_low时,kswapd进程将一次释放32个页,直到空闲内存到达pages_high

相应的机制是通过一个双LRU链表来实现的。

如是这个页没有改动,则将这个内存页放到free list。如果这个页改动了,并且有对应的文件系统,将把这个页刷到磁盘。如果这个页改动了,但是匿名页,则将这个页写的swap区

pdflush

pdflush将对应文件系统脏页,刷到磁盘。
当内存中10%的页是脏页的话,pdflush将开始将脏页同步到文件系统,可以调整这个参数的值:vm.dirty_background_ratio

vmstat与内存相关的参数

实例:

通过下面的分析可以得出结论:io应用突然上涨,大量使用虚拟内存

  • 大量的磁盘块映射到page(bi)
  • 空闲内存(free)维持在17M
  • 为了保持free list,kswapd从buffer获取内存,加到free list。
  • kswapd进程将dirty pages写到swap。(swpd)

总结:

  • 缺页错误。
  • 大量使用swap设备,则系统内存短缺

Comments

2014-11-30