总结 - sync 命令,简洁不简单

作者: 二石兄 | 来源:发表于2016-11-19 19:22 被阅读243次
Darwin `man sync`

作用

强制将内存中的文件缓冲写入磁盘,更新块信息。

# 三无命令: 无参、无返回、无版本
$ sync

场景

在 linux/unix 系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。

sync 命令则可用来强制将内存缓冲区中的数据立即写入磁盘。用户通常无需执行 sync 命令,系统会自动执行 update 或 bdflush 操作,将缓冲区的数据写入磁盘。

那么什么是缓冲(buffer)、缓存(cache),二者又有什么关系及区别呢?

缓冲 && 缓存

- - -
buffer 缓冲 解决写磁盘的效率
cache 缓存 解决读磁盘的效率
  1. buffer(缓冲)是为提高内存和硬盘(或其他I/O设备)之间的数据交换速度而设计。
  2. cache(缓存)是为提高cpu和内存之间的数据交换速度而设计。

简单的理解为: buffer 是即将要被写入磁盘的,而 cache 是被从磁盘中读出来的。

缓冲

缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux 有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过 sync 命令手动清空缓冲。

没有找到具体的命令查看有那些文件处于缓冲状态,也就无法看到运行 sync 命令后的效果。网上甚至看到为保险起起见执行 2 次还是 4 次 sync 命令的讨论。

缓存

缓存(cache)其实全称叫高速缓存,是位于 CPU 与主内存间的一种容量较小但速度很高的存储器。

由于 CPU 的速度远高于主内存,CPU 直接从内存中存取数据要等待一定时间周期,cache 中保存着 CPU 刚用过或循环使用的数据,当 CPU 再次使用该部分数据时可从 cache 中直接调用,这样就减少了 CPU 的等待时间,提高了系统的效率。

cache 经常被用在磁盘的 I/O 请求上,如果有多个进程都要访问某个文件,于是该文件便被写入 cache 以方便下次被访问,以此提高系统性能。

内存与缓存都是宝贵且配置有限的,如何根据需要来手工清除释放缓存呢?

缓存清理

有三种选项清除缓存而无需中断任何进程或服务:

  1. 仅清除页面缓存(page cache)

    # 较为安全
    $ echo 1 > /proc/sys/vm/drop_caches
    
  2. 仅清除目录项和 inode

    $ echo 2 > /proc/sys/vm/drop_caches
    
  3. 大清理: 清除页面缓存、目录项和inode

    # 如果你明确知道自己在做什么,可执行该命令
    # 整理本篇笔记的最大收获,所幸项目服务未受到影响
    $ echo 3 > /proc/sys/vm/drop_caches
    

可以配合 free 命令查看清理缓存的效果,相当的立竿见影。

# 阿里云测试环境 2G 内存

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1875       1660        215          0        201        492
$ echo 1 > /proc/sys/vm/drop_caches
$ free -m
             total       used       free     shared    buffers     cached
Mem:          1875        966        908          0          1         19
$ echo 3 > /proc/sys/vm/drop_caches
$ free -m
             total       used       free     shared    buffers     cached
Mem:          1875        827       1048          0          3         19

总结

sync 命令虽然重要,但针对缓冲的作用以及具体操作都比较单一,倒被缓存这个概念喧宾夺主了,这篇笔记显然有些跑题。

参考

相关文章

  • 总结 - sync 命令,简洁不简单

    作用 强制将内存中的文件缓冲写入磁盘,更新块信息。 场景 在 linux/unix 系统中,在文件或数据处理过程中...

  • Linux手工释放内存

    sync 手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令...

  • 前端可视化开发工具

    livestyle livereload browser-sync 常用命令:browser-sync start...

  • Redis的主从与redis-sentinel自愈

    1. 原理: 从服务器向主服务器发送 SYNC 命令。 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创...

  • Linux系统释放内存

    首先是通过free -h 命令查看,结果显示内存过大。第1行Mem数据: 然后sync命令(Linux sync命...

  • 简洁不简单!

    #v课会·第3季·小学30天思维导图实战营# 打卡天数:18/30 打卡时间:2018.6.28 打卡主题:思维导...

  • Redis的主从与redis-sentinel自愈

    原理: 从服务器向主服务器发送 SYNC 命令。接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 ...

  • 关机和重启命令

    sync 数据同步 sync命令的作用就是把内存中的数据强制向硬盘中保存。这个命令在常规关机的命令中其实会自动执行...

  • Growing

    《简》简洁,不简单;我正在改变…

  • VsCode 设置插件同步

    设置 Vs Code插件同步 安装插件Settings Sync Ctrl+Shift+P打开命令框,输入sync...

网友评论

    本文标题:总结 - sync 命令,简洁不简单

    本文链接:https://www.haomeiwen.com/subject/pcdepttx.html