Linux中buff-cache佔用太高解決方案

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

> free -h
複製代碼

image-20210315144121116

available 表示應用程序能夠申請到的內存node

什麼是buff

buff(Buffer Cache)是一種I/O緩存,用於內存和硬盤的緩衝,是io設備的讀寫緩衝區。根據磁盤的讀寫設計的,把分散的寫操做集中進行,減小磁盤碎片和硬盤的反覆尋道,從而提升系統性能。linux

什麼是cache

cache(Page Cache)是一種高速緩存,用於CPU和內存之間的緩衝 ,是文件系統的cache。vim

把讀取過的數據保存起來,從新讀取時若命中(找到須要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把再也不讀的內容不斷日後排,直至從中刪除。緩存

它們都是佔用內存。二者都是RAM中的數據。簡單來講,buff是即將要被寫入磁盤的,而cache是被從磁盤中讀出來的。bash

目前進程正在實際被使用的內存的計算方式爲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的值,默認爲0markdown

定時任務清除

> 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

原文連接:rumenz.com/rumenbiji/l… 微信公衆號:入門小站oop

相關文章
相關標籤/搜索