Linux中buff-cache占用過高解決方案


我們在使用free -h查看系統內存的時候,有時間會發現buff/cache很高

> free -h

image-20210315144121116

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
微信公眾號:入門小站


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM