以前經常使用free -h
命令來檢視當前作業系統的記憶體使用情況,同時也注意過返回資訊中有一列是buff/cache
,來公司之前,面試官還問過我這兩個的區別,當時沒有回答出來,現在特意回顧記錄下:
free -h
total used free shared buff/cache available
Mem: 3.7G 2.0G 318M 41M 1.4G 1.3G
Swap: 2.0G 87M 1.9G
區別
- A buffer is someting that has yet to be 'written' to disk.
- A cache is someting that has been 'read' from the disk and stored for later use.
buffer用於存放輸入到磁碟上的資料,而cache是從磁碟中讀出資料儲存在記憶體中待以後進行使用。
測試
- 生成一個測試檔案。
- 清空快取
三種清空方式:
echo 1 > /proc/sys/vm/drop_caches
:僅清除頁面快取echo 2 > /proc/sys/vm/drop_caches
:清除目錄項和inodeecho 3 > /proc/sys/vm/drop_caches
:清除頁面快取、目錄項以及inode
- 讀取測試檔案,檢視讀取時長
我們可以看到,讀取時長在52s,第一次讀取檔案後,已經寫入cache。
- 測試第二次讀取檔案時長
當我們清除cache後讀取此測試檔案時長為52s,當第一次讀取完成後寫入cache再次讀取時,時長為0.24s,效能可謂極大提升。
坑
測試時可能遇到的關於time命令的坑,我們系統中是自帶time命令的,不過並不常用,我們用於測試使用的time是需要單獨安裝的:yum -y install time
。可以使用以下方法進行區分:
which time
/usr/bin/which: no time in (/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
給我們上述返回值時,表示我們的time命令還沒有安裝。
type time
time is a shell keyword
返回time是一個shell關鍵字同樣不是我們想要的time命令。
time --version
zsh: command not found: --version
--version 0.00s user 0.00s system 60% cpu 0.001 total
檢視time版本提示命令未安裝,表示我們需要使用的time命令還沒有被安裝。
yum -y install time
which time
/usr/bin/time
/usr/bin/time --version
GNU time 1.7
有上述資訊,我們就可以開始使用啦。