問題描述
linux服務器內存不足觸發監控報警。
K8S在創建pod之后啟動失敗,日志報錯如下:
問題檢查
登錄服務器發現服務器8G內存正在被使用的和空閑內存大概4G,還有大概4G被cache占用
這個cache占用了大量內存,那么這個cache時干什么用的?
Linux 中的緩存稱為Page Cache。它是內核為緩存文件系統磁盤訪問而保留的一定數量的系統內存。這是為了使整體性能更快。在 Linux 讀取系統調用期間,內核檢查緩存是否包含請求的數據塊。如果存在,那么將是一次成功的緩存命中。緩存返回此數據而不對磁盤系統執行任何 I/O。
Linux 緩存方法稱為回寫緩存。首先,數據被寫入緩存並標記,直到同步到磁盤。然后,內核維護內部數據結構,優化在緩存是指其它服務需要使用內存時從緩存中驅逐哪些數據來達到釋放緩存。例如,當內存使用量達到某個閾值時,后台任務開始將臟數據寫入磁盤,從而清空內存緩存。
在廣義上,緩沖區是用於在從一個地方移動到另一個地方時臨時存儲數據的內存區域。緩沖區是存儲在頁面緩存下的數據的磁盤塊表示。此外,緩沖區包含位於頁面緩存下的文件或數據的元數據。
另一方面,緩存是一個臨時存儲區域,用於存儲經常訪問的數據以供快速訪問。
既然知道了cache的作用,那么怎么釋放它?
1.直接手動釋放
#緩存落盤
sync
#釋放pagecache echo 1 > /proc/sys/vm/drop_caches #釋放dentries和inode echo 2 > /proc/sys/vm/drop_caches #釋放pagecache、dentries和inode echo 3 > /proc/sys/vm/drop_caches
2.自動釋放