内核机制引起Page Cache被回收而产生的业务性能下降

Posted 公众号JavaEdge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核机制引起Page Cache被回收而产生的业务性能下降相关的知识,希望对你有一定的参考价值。

内存紧张时,会触发内存回收,内存回收会尝试回收reclaimable(可被回收的)内存,这部分内存既包含Page Cache又包含reclaimable kernel memory(比如slab):

内核机制引起Page

Reclaimer指回收者,可以是内核线程(包括kswapd)、用户线程。回收时,它会依次扫描pagecache page、slab page中有哪些可被回收:

  • 若有,就尝试去回收
  • 若无,就跳过

在扫描可回收page的过程中,回收者一开始扫描的较少,然后逐渐增加扫描比例,直至全部都扫完。这就是内存回收大致过程。

若inode被回收,则其对应Page Cache也都会被回收,所以若业务进程读取的文件对应的inode被回收,则该文件所有Page Cache都会被释放,这也易导致性能问题。

该行为能否观察?也通过/proc/vmstat观察:

$ grep inodesteal /proc/vmstat 
pginodesteal 114341
kswapd_inodesteal 1291853

该行为对应事件为inodesteal,就是上面这俩事件,其中kswapd_inodesteal是指在kswapd回收的过程中,因为回收inode而释放的pagecache page个数;pginodesteal是指kswapd之外其他线程在回收过程中,因为回收inode而释放的pagecache page个数。所以你发现业务的Page Cache被释放后,能通过观察来发现是否因为该事件导致。

以上是关于内核机制引起Page Cache被回收而产生的业务性能下降的主要内容,如果未能解决你的问题,请参考以下文章

图解Linux内核Page Cache

Linux内存回收机制page cache

Linux内存回收机制page cache

RK3399平台开发系列讲解(内核调试篇)9.37如何分析Page Cache产生的问题

深入JVM垃圾回收机制,值得你收藏

垃圾回收机制