您好,登錄后才能下訂單哦!
這篇文章主要介紹了Linux系統如何清除緩存,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1)緩存機制介紹
在Linux系統中,為了提高文件系統性能,內核利用一部分物理內存分配出緩沖區,用于緩存系統操作和數據文件,當內核收到讀寫的請求時,內核先去緩存區找是否有請求的數據,有就直接返回,如果沒有則通過驅動程序直接操作磁盤。
緩存機制優點:減少系統調用次數,降低CPU上下文切換和磁盤訪問頻率。
CPU上下文切換:CPU給每個進程一定的服務時間,當時間片用完后,內核從正在運行的進程中收回處理器,同時把進程當前運行狀態保存下來,然后加載下一個任務,這個過程叫做上下文切換。實質上就是被終止運行進程與待運行進程的進程切換。
2)查看緩存區及內存使用情況
[root@localhost ~]# free -m total used free shared buffers cached Mem: 7866 7725 141 19 74 6897 -/+ buffers/cache: 752 7113 Swap: 16382 32 16350
從上面的命令結果顯示中可以看出:內存總共8G,已使用7725M,剩余141M,不少的人都是這么看的。
但其實這樣并不能作為實際的使用率。因為有了緩存機制,具體算法如下:
空閑內存=free(141)+buffers(74)+cached(6897)
已用內存=total(7866)-空閑內存
由此算出空閑內存是7112M,已用內存754M,這才是真正的使用率,也可參考-/+ buffers/cache這行信息也是內存正確使用率。
3)緩存區分buffers和cached區別
內核在保證系統能正常使用物理內存和數據量讀寫情況下來分配緩沖區大小。
buffers用來緩存metadata及pages,可以理解為系統緩存,例如,vi打開一個文件。
cached是用來給文件做緩存,可以理解為數據塊緩存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 測試寫入一個文件,就會被緩存到緩沖區中,當下一次再執行這個測試命令時,寫入速度會明顯很快。
4)Swap用途
Swap意思是交換分區,通常我們說的虛擬內存,是從硬盤中劃分出的一個分區。當物理內存不夠用的時候,內核就會釋放緩存區(buffers/cache)里一些長時間不用的程序,然后將這些程序臨時放到Swap中,也就是說如果物理內存和緩存區內存不夠用的時候,才會用到Swap。
swap清理:
swapoff -a && swapon -a
注意:這樣清理有個前提條件,空閑的內存必須比已經使用的swap空間大
5)釋放緩存區內存的方法
a)清理pagecache(頁面緩存)
# echo 1 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=1
b)清理dentries(目錄緩存)和inodes
# echo 2 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=2
c)清理pagecache、dentries和inodes
# echo 3 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=3
上面三種方式都是臨時釋放緩存的方法,要想永久釋放緩存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!
另外,可以使用sync命令來清理文件系統緩存,還會清理僵尸(zombie)對象和它們占用的內存
# sync
上面操作在大多數情況下都不會對系統造成傷害,只會有助于釋放不用的內存。
但是如果在執行這些操作時正在寫數據,那么實際上在數據到達磁盤之前就將它從文件緩存中清除掉了,這可能會造成很不好的影響。那么如果避免這種事情發生呢?
因此,這里不得不提一下/proc/sys/vm/vfs_cache_pressure這個文件,告訴內核,當清理inoe/dentry緩存時應該用什么樣的優先級。
vfs_cache_pressure=100 這個是默認值,內核會嘗試重新聲明dentries和inodes,并采用一種相對于頁面緩存和交換緩存比較”合理”的比例。
減少vfs_cache_pressure的值,會導致內核傾向于保留dentry和inode緩存。
增加vfs_cache_pressure的值,(即超過100時),則會導致內核傾向于重新聲明dentries和inodes
總之,vfs_cache_pressure的值:
小于100的值不會導致緩存的大量減少
超過100的值則會告訴內核你希望以高優先級來清理緩存。
其實無論vfs_cache_pressure的值采用什么值,內核清理緩存的速度都是比較低的。
如果將此值設置為10000,系統將會將緩存減少到一個合理的水平。
釋放內存前先使用sync命令做同步,以確保文件系統的完整性,將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。否則在釋放緩存的過程中,可能會丟失未保存的文件。
/proc是一個虛擬文件系統,可以通過對它的讀寫操作作為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整。也就是說我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。
drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統默認值)
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放所有緩存
Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Linux系統如何清除緩存”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。