free指令
[root@node8 ~]# free -h
total used free shared buff/cache available
Mem: 31G 9.7G 12G 3.5M 9.4G 20G
Swap: 0B 0B 0B
total:表示 總計實體記憶體的大小。used+free+buff/cache
used:表示 已使用多少。
free:表示 可用記憶體多少。
Shared:表示多個程序共享的記憶體總額。
Buffers/cached:表示 磁盤緩存的大小。
buffer比較小:buffer cache,即緩存經常通路塊裝置的中繼資料
cache比較大: page cache,即緩存檔案内容+slab。slab也分可回收和不可回收部分,可手動回收,但是會在回收緩存這段時間影響主機性能,并且不是有所的可回收slab和page cache都能被回收,正在使用的這些緩存不能被回收,否則系統的性能會很低,是以最後可能的記憶體是多少,就得評估能夠回收的有多少,就有了下面這個參數
available: 是一個估計值,比較準确
- 注意
top和free看的結果一緻;
free指令中used的結果,不包含buffer/cache
舊版本的free指令才有:-/+ buffers/cache,新版的加入了available參數
- 參考連結
free(1) - Linux manual page
vfs中各種cache的解釋
- page cache
結合了虛拟記憶體和檔案資料,将讀取的檔案資料緩存在虛拟記憶體,以便下次讀取相同的内容時,直接從記憶體讀取,加快資料通路速度
- inode cache
儲存最近通路的檔案i-odes
- buffer cache
buffer和塊裝置互動,緩存最近使用的磁盤塊中繼資料,是以一般很小
Linux核心通過buffer cache讀取檔案資料,但是緩存到page cache中,以便再次使用
- directory cache
在記憶體中是一個樹狀結構,代表檔案系統目錄結構的一部分,其将會檔案路徑映射為inode并加速檔案路徑名的查找,就像dns的作用,根據域名找ip,directory cache的基本元素是d-entry
https://zhuanlan.zhihu.com/p/250300261
slab
Linux記憶體管理模式,頁式管理适合于大塊記憶體的情形,而對于核心對象級别的較小記憶體情形下,不足以占用1個頁。就用slab,lab一般對應1個或者多個頁,slab裡面存儲一個個對象。
https://www.mawenbao.com/research/linux-ate-my-memory.html
https://fivezh.github.io/2017/06/25/Linux-slab-info/
清除緩存
echo 3 > /proc/sys/vm/drop_caches