本文主要参考的内核文档:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

drop_caches

==============================================================drop_cachesWriting to this will cause the kernel to drop clean caches, as well as
reclaimable slab objects like dentries and inodes.  Once dropped, their
memory becomes free.To free pagecache:echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:echo 3 > /proc/sys/vm/drop_cachesThis is a non-destructive operation and will not free any dirty objects.
To increase the number of objects freed by this operation, the user may run
`sync' prior to writing to /proc/sys/vm/drop_caches.  This will minimize the
number of dirty objects on the system and create more candidates to be
dropped.This file is not a means to control the growth of the various kernel caches
(inodes, dentries, pagecache, etc...)  These objects are automatically
reclaimed by the kernel when memory is needed elsewhere on the system.Use of this file can cause performance problems.  Since it discards cached
objects, it may cost a significant amount of I/O and CPU to recreate the
dropped objects, especially if they were under heavy use.  Because of this,
use outside of a testing or debugging environment is not recommended.You may see informational messages in your kernel log when this file is
used:cat (1234): drop_caches: 3These are informational only.  They do not mean that anything is wrong
with your system.  To disable them, echo 4 (bit 2) into drop_caches.==============================================================

写drop_caches文件会让内核删掉clean caches和reclaimable slab:

  • echo 1 > /proc/sys/vm/drop_caches:删掉clean pagecache
  • echo 2 > /proc/sys/vm/drop_caches:删掉reclaimable slab
  • echo 3 > /proc/sys/vm/drop_caches:删掉clean pagecache和reclaimable slab
  • 写drop_caches文件实际上是向内核发送一个清缓存的消息,是瞬时的(消息是瞬时的,类似edge),而且是一个非破坏性的操作,也就是没有落盘的数据不会丢,即不会删掉dirty objects
  • 要想多清一点缓存,可以在写drop_caches文件之前运行sync指令,将脏数据落盘变成干净的缓存;
    • 正因为如此,所以要注意写这个文件有时候会造成性能问题

那pagecache和slab是什么玩意儿?

pagecache和slab

free指令里面有cache,可以先看看这个指令的man文档:https://www.man7.org/linux/man-pages/man1/free.1.html

非常接近真相了,要转看proc,man proc然后找到/proc/meminfo:https://man7.org/linux/man-pages/man5/proc.5.html

page cache是磁盘文件的缓存,这里更多的可以去看Linux文件系统,page cache主要放在inode->address_space中。

sreclaimable是内核slab objects中可回收的部分。Linux物理内存管理的底层是buddy系统,最小分配的物理内存是4K,但是内核又有很多小对象,像inode、dentry、task_struct、mm_struct、vm_area_struct等,这些几百字节的小对象如果一个就分配4K内存那太浪费了,所以内核就有slab系统做slab cache来分配和缓存这些内核小对象,可以通过/proc/slabinfo文件查看这些小对象的缓存情况。

之所以说part of slab,是因为slab系统的算法将slab cache分为满、空和部分,而空的就是可以回收的部分:

  • 满的:slab 中的所有对象被标记为使用
  • 空的:slab 中的所有对象被标记为空闲
  • 部分:slab 中的对象有的被标记为使用,有的被标记为空闲

关于slab,《understanding the Linux vritual memory manager》第八章讲的很详尽了,本文就不赘述,建议阅读该书第八章。

所以,page cache更多的要去看Linux文件系统,slab更多要去看Linux物理内存管理中slab分配器,鉴于篇幅,本文只是提及。

除此之外,还有clean/dirty page cache,有两条线都涉及到了:

  • 可以去看Linux物理内存回收那条线,即kswapd+LRU算法,这里会将内存页分为anno page和file-backed page(即对应本文的page cache),每一种内存页基于LRU算法又可以分成active和inactive,其中kswapd内核线程会周期性的将inactive dirty page刷盘使其变成inactive clean page,等到内存紧张的时候再回收inactive page;
  • 也可以去看pdflush这个刷脏页的内核线程,在Linux kernel 2.6以前,是bdflush+kupdate,前者是从脏页的数量角度后者是从脏页在内存中存在的时间角度来刷盘,到了Linux kernel 2.6,pdflush内核线程替代了他们俩,pdflush有两个主要的函数:
    • background_writeout():从数量维度出发,当脏页达到一定数量,就唤醒pdflush调用该方法,有两个主要的虚拟内存选项dirty_backgroud_ratio和dirty_ratio;
    • wb_kupdate():从时间维度出发,周期性的唤醒pdflush调用该方法,如果脏页存活时间超过配置,则刷盘,有两个主要的虚拟内存选项dirty_expire_centisecs和dirty_writeback_centisecs;

【随笔】Linux drop_caches相关推荐

  1. 运维小菜鸟随笔Linux入门级操作命令(更新中。。。)

    运维小菜鸟随笔&Linux入门级操作命令 从事实施运维行业已三年有余,却从未系统的学习过Linux,一直停留在有问题找百度的境界.近日终于痛下决心,系统的梳理一下Linux相关知识,顺便看看, ...

  2. linux学习随笔——linux文件权限管理和网络配置

    一.linux文件权限管理 查看某个文件的权限命令:ls -l linux文件权限有4种:读(r).写(w).执行(x)和无权限(-) 一般用10个字符表示其权限,按照(1-3-3-3)来分组划分 1 ...

  3. linux 终端必须退出 history才会记录吗,Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】...

    基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...

  4. DynDNS使用随笔 Linux mips

    暂且小结一下: 1.下载编译客户端代码并交叉编译 首先,按照网上提示的步骤,在www.dyndns.com注册了帐号,并申请了域名,绑定了IP; 然后,在站点中找到客户端源码,其中ddclient是p ...

  5. linux修改文件没有备份文件,linux文件或目录权限修改后如何恢复(备份了权限就能恢复)...

    操作系统 RHEL5 如果你在linux上执行了如下操作 chmod -R 777 / 或者 chmod -R 700 / 那么恭喜你,你的系统即将崩溃,重启之后,你进不了图形界面,而且很多服务都起不 ...

  6. VMware下Linux配置局域网和外网访问(CentOS)

    要使用Linux系统很重要的一个操作就是使Linux系统能够访问互联网,只有Linux系统能够访问互联网才能够去下载很多自己所需要的资源,如果不能访问互联网那么使用Linux系统往往会卡在这一步,假设 ...

  7. linux字符串排序文件,Linux awk+uniq+sort 统计文件中某字符串出现次数并排序

    https://blog.csdn.net/qq_28766327/article/details/78069989 在服务器开发中,我们经常会写入大量的日志文件.有时候我们需要对这些日志文件进行统计 ...

  8. Linux内核静态映射表建立过程分析

    Linux内核静态映射表建立过程分析 分析的源码:九鼎为s5pv210移植过的linux+qt4.8的kernel,内核版本号2.6.35 建立映射表的三个关键部分: 映射表 映射表建立函数 映射表建 ...

  9. linux改完权限后 自动恢复,linux文件或目录权限修改后如何恢复(备份了权限就能恢复)...

    操作系统 RHEL5 如果你在linux上执行了如下操作 chmod -R 777 / 或者 chmod -R 700 / 那么恭喜你,你的系统即将崩溃,重启之后,你进不了图形界面,而且很多服务都起不 ...

  10. linux+指令+tree,Linux命令——tree

    简介 Linux tree命令用于以树状图列出目录的内容. 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件. 用法 无参数,列出当前目录下字目录.文件 [root@localhos ...

最新文章

  1. Android环境变量的设置(详细图解版)
  2. 你写代码,难道是因为热爱吗?
  3. python入门指南百度云-Python入门指南
  4. 《第一行代码》学习笔记16-碎片Fragment(1)
  5. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
  6. JUnit基础及第一个单元测试实例
  7. php画图取色,procreate怎么取色
  8. jquery 回车事件
  9. 杨辉再发声明:承认听取付向东报告后受其“鼓舞”,为没及时沟通向其致歉...
  10. 学习SQLite之路(二)
  11. python和易语言爬虫速度_如何优化 Python 爬虫的速度?
  12. 你们真的会追汉纸么?!
  13. C#开发微信门户及应用(13)-使用地理位置扩展相关应用
  14. 白话区块链 之2: 区块链技术理念
  15. 使用 Premiere 制作视频简介
  16. 常见下载方式之BT下载实现过程详解
  17. vue手机端日期插件
  18. 年终盘点 | 用Python分析了上千个基金,终于发现了赚钱的秘密!
  19. ios不能保存png_AnyTrans for iOS for Mac (强大的ios设备管理工具)
  20. 计算机网络监控技术,实现网络流量监控的核心技术要求

热门文章

  1. 架构方案(9) 如何构建一套高可用的 APP 消息推送平台
  2. TD-SCDMA信道模式
  3. 一元初始,森罗万象:5G角逐已被荣耀拉开序幕
  4. Linus ,扎克伯格,雷军等巨佬的办公桌
  5. 异常解决 java.lang.UnsupportedOperationException: Required method destroyItem was not overridden
  6. xhEditor用法
  7. vue Uint8Array转字符串中文乱码
  8. uint32 java_关于Java的int和C的uint32之间的转换
  9. Project Management-软件开发之项目管理
  10. 虚拟机连不上群晖服务器,没NAS也能体验群晖:VMware虚拟机安装DSM详细安装步骤...