综上 , echo 1 > /proc/sys/vm/drop_caches会清除所有inode的缓存页 , 这里的inode包括VFS的inode、所有文件系统inode(也包括bdev伪文件系统块设备的inode的缓存页) 。所以该命令执行后 , 就会将整个系统的page cache和buffer cache全部清除 , 当然前提是这些cache都是非脏的、没有正被使用的 。
接下来看下实际效果:
[root@test usb] # cat /proc/meminfoMemTotal: 90516 kBMemFree: 12396 kBBuffers: 96 kBCached: 60756 kB[root@test usb] # busybox_v400 sync[root@test usb] # busybox_v400 sync[root@test usb] # busybox_v400 sync[root@test usb] # echo 1 > /proc/sys/vm/drop_caches[root@test usb] # cat /proc/meminfoMemTotal: 90516 kBMemFree: 68820 kBBuffers: 12 kBCached: 4464 kB可以看到Buffers和Cached都降了下来 , 在drop_caches前建议执行sync命令 , 以确保数据的完整性 。sync 命令会将所有未写的系统缓冲区写到磁盘中 , 包含已修改的 i-node、已延迟的块 I/O 和读写映射文件等 。
上面的设置虽然简单但是比较粗暴 , 使cache的作用基本无法发挥 , 尤其在系统压力比较大时进行drop cache处理容易产生问题 。因为drop_cache是全局在清内存 , 清的过程会加页面锁 , 导致有些进程等页面锁时超时 , 导致问题发生 。因此 , 需要根据系统的状况进行适当的调节寻找最佳的方案 。
1.6 经验总结以上分别讨论了Cache和Buffer分别从哪里来?什么时候消耗在哪里?如何分别控制Cache和Buffer这三个问题 。最后还介绍了vmtouch工具的使用 。
要深入理解Linux的Cache和Buffer牵涉大量内核核心机制(VFS、内存管理、块设备驱动、页高速缓存、文件访问、页框回写) , 需要制定计划在后续工作中不断理解和消化 。
【Linux的Cache和Buffer理解】
推荐阅读
- 活的化石,昌宁的千年古茶树
- 教你如何把电脑磁盘标修改成你女神的图片
- win10网页出现stack overflow at line 0的解决方法
- 太平猴魁外形品质的审评方法介绍
- 不知道这十项Linux常识,别说自己是运维工程师
- 普洱茶消费主流不是快消品
- HTTPS原理看了很多,这个是最清晰的
- MySQL中的并发控制概览
- 获取有关 Linux shell 内置命令的帮助
- SEO竞争对手分析