作用
強(qiáng)制將內(nèi)存中的文件緩沖寫入磁盤,更新塊信息。
# 三無命令: 無參、無返回、無版本
$ sync
場景
在 linux/unix 系統(tǒng)中,在文件或數(shù)據(jù)處理過程中一般先放到內(nèi)存緩沖區(qū)中,等到適當(dāng)?shù)臅r候再寫入磁盤,以提高系統(tǒng)的運(yùn)行效率。
sync 命令則可用來強(qiáng)制將內(nèi)存緩沖區(qū)中的數(shù)據(jù)立即寫入磁盤。用戶通常無需執(zhí)行 sync 命令,系統(tǒng)會自動執(zhí)行 update 或 bdflush 操作,將緩沖區(qū)的數(shù)據(jù)寫入磁盤。
那么什么是緩沖(buffer)、緩存(cache),二者又有什么關(guān)系及區(qū)別呢?
緩沖 && 緩存
- | - | - |
---|---|---|
buffer | 緩沖 | 解決寫磁盤的效率 |
cache | 緩存 | 解決讀磁盤的效率 |
- buffer(緩沖)是為提高內(nèi)存和硬盤(或其他I/O設(shè)備)之間的數(shù)據(jù)交換速度而設(shè)計。
- cache(緩存)是為提高cpu和內(nèi)存之間的數(shù)據(jù)交換速度而設(shè)計。
簡單的理解為: buffer 是即將要被寫入磁盤的,而 cache 是被從磁盤中讀出來的。
緩沖
緩沖(buffers)是根據(jù)磁盤的讀寫設(shè)計的,把分散的寫操作集中進(jìn)行,減少磁盤碎片和硬盤的反復(fù)尋道,從而提高系統(tǒng)性能。linux 有一個守護(hù)進(jìn)程定期清空緩沖內(nèi)容(即寫入磁盤),也可以通過 sync 命令手動清空緩沖。
沒有找到具體的命令查看有那些文件處于緩沖狀態(tài),也就無法看到運(yùn)行 sync 命令后的效果。網(wǎng)上甚至看到為保險起起見執(zhí)行 2 次還是 4 次 sync 命令的討論。
緩存
緩存(cache)其實(shí)全稱叫高速緩存,是位于 CPU 與主內(nèi)存間的一種容量較小但速度很高的存儲器。
由于 CPU 的速度遠(yuǎn)高于主內(nèi)存,CPU 直接從內(nèi)存中存取數(shù)據(jù)要等待一定時間周期,cache 中保存著 CPU 剛用過或循環(huán)使用的數(shù)據(jù),當(dāng) CPU 再次使用該部分?jǐn)?shù)據(jù)時可從 cache 中直接調(diào)用,這樣就減少了 CPU 的等待時間,提高了系統(tǒng)的效率。
cache 經(jīng)常被用在磁盤的 I/O 請求上,如果有多個進(jìn)程都要訪問某個文件,于是該文件便被寫入 cache 以方便下次被訪問,以此提高系統(tǒng)性能。
內(nèi)存與緩存都是寶貴且配置有限的,如何根據(jù)需要來手工清除釋放緩存呢?
緩存清理
有三種選項(xiàng)清除緩存而無需中斷任何進(jìn)程或服務(wù):
-
僅清除頁面緩存(page cache)
# 較為安全 $ echo 1 > /proc/sys/vm/drop_caches
-
僅清除目錄項(xiàng)和 inode
$ echo 2 > /proc/sys/vm/drop_caches
-
大清理: 清除頁面緩存、目錄項(xiàng)和inode
# 如果你明確知道自己在做什么,可執(zhí)行該命令 # 整理本篇筆記的最大收獲,所幸項(xiàng)目服務(wù)未受到影響 $ echo 3 > /proc/sys/vm/drop_caches
可以配合 free 命令查看清理緩存的效果,相當(dāng)?shù)牧⒏鸵娪啊?/p>
# 阿里云測試環(huán)境 2G 內(nèi)存
$ 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
總結(jié)
sync 命令雖然重要,但針對緩沖的作用以及具體操作都比較單一,倒被緩存這個概念喧賓奪主了,這篇筆記顯然有些跑題。