我們在使用
free -h
查看系統內存的時候,有時間會發現buff/cache
很高
> free -h
available 表示應用程序可以申請到的內存
什么是buff
buff(Buffer Cache)是一種I/O緩存,用於內存和硬盤的緩沖,是io設備的讀寫緩沖區。根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。
什么是cache
cache(Page Cache)是一種高速緩存,用於CPU和內存之間的緩沖 ,是文件系統的cache。
把讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往后排,直至從中刪除。
它們都是占用內存。兩者都是RAM中的數據。簡單來說,buff是即將要被寫入磁盤的,而cache是被從磁盤中讀出來的。
目前進程正在實際被使用的內存的計算方式為
used-buff/cache
,通過釋放buff/cache內存后,我們還可以使用的內存量free+buff/cache
。通常我們在頻繁存取文件后,會導致buff/cache的占用量增高。
清除buff/cache
手動清除
> sync
> echo 1 > /proc/sys/vm/drop_caches
> echo 2 > /proc/sys/vm/drop_caches
> echo 3 > /proc/sys/vm/drop_caches
- sync:將所有未寫的系統緩沖區寫到磁盤中,包含已修改的i-node、已延遲的塊I/O和讀寫映射文件
- echo 1 > /proc/sys/vm/drop_caches:清除page cache
- echo 2 > /proc/sys/vm/drop_caches:清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的pagecache。
- echo 3 > /proc/sys/vm/drop_caches:清除pagecache和slab分配器中的緩存對象。
/proc/sys/vm/drop_caches的值,默認為0
定時任務清除
> vim clean.sh
#!/bin/bash#每兩小時清除一次緩存
echo "開始清除緩存"
sync;sync;sync #寫入硬盤,防止數據丟失
sleep 20#延遲20秒
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
> chmod +x clean.sh
> crontab -e
# 每兩小時執行一次
0 */2 * * * /opt/clean.sh
- 設置crond啟動以及開機自啟
- systemctl start crond.service
- systemctl enable crond.service
原文鏈接:https://rumenz.com/rumenbiji/linux-buff-cache.html
微信公眾號:入門小站