vmtouch——Linux下的文件緩存管理神器

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

vmtouch——Linux下的文件緩存管理神器 生活 第1張

我們都知道Linux的記憶體管理是基於虛擬記憶體來管理的。linux基於進程來分配和使用記憶體,進程通過一個進程表task_struct管理進程信息,記憶體部分通過一個mm_struct的結構映射,分為代碼段、數據段、BSS段,堆和棧。虛擬記憶體進行地址映射到實際的物理記憶體(固定4K的記憶體頁面)。由於文件IO訪問較慢,linux提供了緩存和緩沖形式把文件臨時放進記憶體處理,來提高處理效率。

vmtouch——Linux下的文件緩存管理神器 生活 第2張

在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——Linux下的文件緩存管理神器 生活 第3張

主要功能和用途

vmtouch主要功能如下(參考自官方文檔):

瀏覽系統緩存中的文件;

讓系統緩存文件或者目錄,清理文件的緩存;

固化(鎖定)文件到記憶體(不怕操作系統的清理);

轉存虛擬記憶體的文件,主要用於故障服務器是記憶體信息遷移;

創建一個”熱備用”的文件服務器

加快批處理/計劃任務(cron)任務的執行;

更多請使用vmtouch -h及官方的詳細技術文檔。

功能演示

該部分我們將實例展示vmtouch的主要用途,請先按照安裝部分文檔安裝vmtouch工具,然後隨著蟲蟲一起實例操作。

統計文件或者目錄在緩存中的記錄

我們以系統認證記錄日志文件/var/log/secure為例子為開頭,查看該日志在緩存中記錄:

vmtouch——Linux下的文件緩存管理神器 生活 第4張

cd /var/log

ll -h secure

vmtouch /var/secure

結果如上圖,可以大小164K的大小的secure日志文件已經全部被緩存到記憶體了。

我們再看下/var/log 這個目錄

vmtouch——Linux下的文件緩存管理神器 生活 第5張

vmtouch /var/log,可見該目錄22子目錄,109文件,8G大小中在記憶體中緩存了6M,占用了1626個記憶體頁(一個記憶體也占用4K,大概6G)。

緩存文件到記憶體

我們先找一個較大的web訪問日志acess.log,先看看他占的緩存:

vmtouch access.log

vmtouch——Linux下的文件緩存管理神器 生活 第6張

可見該文件還沒有占用任何的緩存。我用下面的方法,可以把一部分內容轉入記憶體,比如最後的10000行:

tail -n 10000 access.log >/dev/null

然後再看這個文件的緩存信息

vmtouch access.log

vmtouch——Linux下的文件緩存管理神器 生活 第7張

圖上信息顯示,現在緩存了3M的記憶體,占用了808個記憶體頁。

讓我們用vmtouch -t 選項就可以將一個文件完全緩存到記憶體中。vmtouch有-v選項可以顯示具體的緩存過程的信息(在終端上看到的動畫進度條,按Enter見刷新過程)。

vmtouch -vt access.log

vmtouch——Linux下的文件緩存管理神器 生活 第8張

刪除記憶體中文件的緩存

上面一部分我們緩存了access.log,信息如下:

vmtouch——Linux下的文件緩存管理神器 生活 第9張

但是我們不想要了,畢竟占了很多記憶體呢。

vmtouch——Linux下的文件緩存管理神器 生活 第10張

清理文件的緩存用vmtouch也非常簡單只需使用-e選項,下面我們刪除記憶體中的access.log緩存。

vmtouch -ve access.log

vmtouch——Linux下的文件緩存管理神器 生活 第11張

注意清理緩存中,free信息中的記憶體變化。

vmtouch——Linux下的文件緩存管理神器 生活 第12張

固化文件到記憶體緩存,並以啟動守護模式

用-l選項可以固化文件到記憶體緩存,-d選項做到守護模式。-d需要和-d一起使用。

vmtouch -dl /var/www/htdocs/critical/

實例:利用vmtouch添加緩存任務執行

最後我們舉例一個實例,用vmtouch添加文件的緩存,來提高任務的執行。

任務:我們統計access.log中,報錯404的記錄 :

執行命令棧:

time grep 404 access.log|sort|wc –l

vmtouch——Linux下的文件緩存管理神器 生活 第13張

注意:為了記錄任務執行的時間,我使用了time在命令棧開頭,可以自動記錄執行的時間。

我們將文件緩存到記憶體中,然後再執行,同樣的語句:

vmtouch——Linux下的文件緩存管理神器 生活 第14張

測試用時為1.8秒,比之前的9秒,提高了大概5倍,效果杠杠的!

後記

vmtouch作為一款linux下的文件緩存管理的工具,應該是每一個linux人都應該擁有和熟練使用的工具,可以在很多時候幫我們解決棘手的記憶體問題。更多使用大家可以在實踐中不斷探索擴充,如果有更好的想法和實例請直接回復本文章。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!