2021-05-12 14:32:11
Linux下的快取機制及清理buffer/cache/swap的方法梳理
(1)快取機制
為了提高檔案系統效能,核心利用一部分實體記憶體分配出緩衝區,用於快取系統操作和資料檔案,當核心收到讀寫的請求時,核心先去快取區找是否有請求的資料,有就直接返回,如果沒有則通過驅動程式直接操作磁碟。
快取機制優點:減少系統呼叫次數,降低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
#釋放dentries和inodes
echo 2 >/proc/sys/vm/drop_caches
#釋放pagecache、dentries和inodes
echo 3 >/proc/sys/vm/drop_caches
b)也可以使用sysctl重置核心執行引數
sysctl -w vm.drop_caches=3
注意:這兩個方式都是臨時生效,永久生效需新增sysctl.conf檔案中,一般寫成指令碼手動清理,建議不要清理。
修改/etc/sysctl.conf 新增如下選項後就不會記憶體持續增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3
上面的設定比較粗暴,使cache的作用基本無法發揮。需要根據機器的狀況進行適當的調節尋找最佳的折衷。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136592.htm
相關文章