尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
我們都知道Linux的記憶體管理是基於虛擬記憶體來管理的。linux基於進程來分配和使用記憶體,進程通過一個進程表task_struct管理進程信息,記憶體部分通過一個mm_struct的結構映射,分為代碼段、數據段、BSS段,堆和棧。虛擬記憶體進行地址映射到實際的物理記憶體(固定4K的記憶體頁面)。由於文件IO訪問較慢,linux提供了緩存和緩沖形式把文件臨時放進記憶體處理,來提高處理效率。
在Linux下文件記憶體緩存的管理一直是個痛點,本文中蟲蟲給大家介紹一個方便快捷的文件緩存診斷和管理工具vmtouch。vmtouch是用c語言編寫的文件緩存管理工具,適用用於所有類Unix系統。vmtouch是可以免費開源使用的開放軟件,基於BSD協議發布。
安裝
vmtouch安裝很簡單,可以通過系統安裝包安裝:
比如ubuntu:
sudo add-apt-repository ppa:pg-radadia/vmtouchsudo apt-get update
當然更通用的方法是,從源碼安裝。為了保證使用的是最新的版本,我們從vmtouch的github clone最新版本源碼編譯安裝:
git clone github:/hoytech/vmtouch.git
cd vmtouch
make
sudo make install
這樣安裝後執行文件為/usr/local/bin/vmtouch,為了能直接使用,我們給它在/bin增加一個軟連接:
ln -s /usr/local/bin/vmtouch /bin/vmtouch
然後就可以直接使用了,界面如下,當前版本為v1.3.1:
主要功能和用途
vmtouch主要功能如下(參考自官方文檔):
瀏覽系統緩存中的文件;
讓系統緩存文件或者目錄,清理文件的緩存;
固化(鎖定)文件到記憶體(不怕操作系統的清理);
轉存虛擬記憶體的文件,主要用於故障服務器是記憶體信息遷移;
創建一個”熱備用”的文件服務器
加快批處理/計劃任務(cron)任務的執行;
更多請使用vmtouch -h及官方的詳細技術文檔。
功能演示
該部分我們將實例展示vmtouch的主要用途,請先按照安裝部分文檔安裝vmtouch工具,然後隨著蟲蟲一起實例操作。
統計文件或者目錄在緩存中的記錄
我們以系統認證記錄日志文件/var/log/secure為例子為開頭,查看該日志在緩存中記錄:
cd /var/log
ll -h secure
vmtouch /var/secure
結果如上圖,可以大小164K的大小的secure日志文件已經全部被緩存到記憶體了。
我們再看下/var/log 這個目錄
vmtouch /var/log,可見該目錄22子目錄,109文件,8G大小中在記憶體中緩存了6M,占用了1626個記憶體頁(一個記憶體也占用4K,大概6G)。
緩存文件到記憶體
我們先找一個較大的web訪問日志acess.log,先看看他占的緩存:
vmtouch access.log
可見該文件還沒有占用任何的緩存。我用下面的方法,可以把一部分內容轉入記憶體,比如最後的10000行:
tail -n 10000 access.log >/dev/null
然後再看這個文件的緩存信息
vmtouch access.log
圖上信息顯示,現在緩存了3M的記憶體,占用了808個記憶體頁。
讓我們用vmtouch -t 選項就可以將一個文件完全緩存到記憶體中。vmtouch有-v選項可以顯示具體的緩存過程的信息(在終端上看到的動畫進度條,按Enter見刷新過程)。
vmtouch -vt access.log
刪除記憶體中文件的緩存
上面一部分我們緩存了access.log,信息如下:
但是我們不想要了,畢竟占了很多記憶體呢。
清理文件的緩存用vmtouch也非常簡單只需使用-e選項,下面我們刪除記憶體中的access.log緩存。
vmtouch -ve access.log
注意清理緩存中,free信息中的記憶體變化。
固化文件到記憶體緩存,並以啟動守護模式
用-l選項可以固化文件到記憶體緩存,-d選項做到守護模式。-d需要和-d一起使用。
vmtouch -dl /var/www/htdocs/critical/
實例:利用vmtouch添加緩存任務執行
最後我們舉例一個實例,用vmtouch添加文件的緩存,來提高任務的執行。
任務:我們統計access.log中,報錯404的記錄 :
執行命令棧:
time grep 404 access.log|sort|wc –l
注意:為了記錄任務執行的時間,我使用了time在命令棧開頭,可以自動記錄執行的時間。
我們將文件緩存到記憶體中,然後再執行,同樣的語句:
測試用時為1.8秒,比之前的9秒,提高了大概5倍,效果杠杠的!
後記
vmtouch作為一款linux下的文件緩存管理的工具,應該是每一個linux人都應該擁有和熟練使用的工具,可以在很多時候幫我們解決棘手的記憶體問題。更多使用大家可以在實踐中不斷探索擴充,如果有更好的想法和實例請直接回復本文章。