调用drop_caches接口清理Page Cache

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

Linux系统及其用户进程运行过程中会产生Page Cache(文件缓存),随着运行时间的增加,Page Cache的占比逐渐上升,进而占用更多的系统资源。这可能导致对性能敏感型业务出现性能抖动,甚至引发部分任务出现OOM(Out of Memory)现象。在需要释放大量内存的业务场景中,可以通过/proc/sys/vm/drop_caches接口来释放缓存。

操作步骤

警告

由于drop_caches回收内存删除了系统中的Page Cache及所需的dentries(目录项)和inodes(索引节点),可能导致在进行磁盘IO操作等过程中出现性能下降,请根据实际需求谨慎进行内存回收。

以下操作仅会释放未被使用的对象,内存中的脏页对象将继续被使用,直至其写出到磁盘前无法释放。如需释放脏页对象的内存,请在使用drop_caches接口清理Page Cache之前执行sync命令,将内存中的脏页面写出到磁盘,这些操作通常能够释放更多的内存。

  • 释放页面缓存。

    • 调用drop_caches接口释放Page Cache。

      sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
    • 通过sysctl命令释放Page Cache。

      sudo sysctl -w vm.drop_caches=1
  • 释放dentriesinodes

    • 调用drop_caches接口释放dentriesinodes

      sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
    • 通过sysctl命令释放dentriesinodes

      sudo sysctl -w vm.drop_caches=2
  • 释放Page Cache、dentriesinodes

    • 调用drop_caches接口释放Page Cache、dentriesinodes

      sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
    • 通过sysctl命令释放Page Cache、dentriesinodes

      sudo sysctl -w vm.drop_caches=3