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

总结 - sync 命令,简洁不简单_第1张图片
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 命令虽然重要,但针对缓冲的作用以及具体操作都比较单一,倒被缓存这个概念喧宾夺主了,这篇笔记显然有些跑题。

参考

  • CSDN: Linux中Buffer和Cache的区别
  • CSDN: linux sync命令
  • Linux 公社: 在 Linux 上如何清除内存的 Cache、Buffer 和交换空间

你可能感兴趣的:(总结 - sync 命令,简洁不简单)