Linux下的快取機制free及清理buffer/cache/swap的方法梳理
官網解析
Linux的Cache Memory(快取記憶體)機制
https://www.cnblogs.com/newjiang/p/9541223.html
(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)-空閒記憶體
由此算出
空閒記憶體
是
7112
M,已用記憶體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)直接改變核心執行引數
Linux釋放記憶體的命令:
sync
echo 1 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之間的數字,代表不同的含義:
0:不釋放(系統預設值)
1:釋放頁快取
2:釋放dentries和inodes
3:釋放所有快取
釋放完記憶體後改回去讓系統重新自動分配記憶體。
echo 0 >/proc/sys/vm/drop_caches
free -m #看記憶體是否已經釋放掉了。
如果我們需要釋放所有快取,就輸入下面的命令:
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的作用基本無法發揮。需要根據機器的狀況進行適當的調節尋找最佳的折衷。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2146075/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下的快取機制及清理buffer/cache/swap的方法梳理Linux快取
- Linux記憶體管理Swap和Buffer Cache機制Linux記憶體
- HTTP請求的快取(Cache)機制HTTP快取
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- 手動釋放Linux上的Swap、Buffer和CacheLinux
- Python 的快取機制: functools.lru_cachePython快取
- Java中常用快取Cache機制的實現Java快取
- linux中記憶體使用,swap,cache,buffer的含義Linux記憶體
- Linux free中buffer與cache區別Linux
- Java快取機制:Ehcache與Guava Cache的比較Java快取Guava
- latch free 中 cache buffer chain 的整理AI
- Linux如何手動釋放Swap、Buffer和CacheLinux
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- OS X Yosemite下Dns快取清理方法MITDNS快取
- Linux下清理記憶體和Cache方法Linux記憶體
- Linux記憶體管理機制中buffer和cache的區別Linux記憶體
- linux清理快取Linux快取
- Nginx快取原理及機制Nginx快取
- HTTP快取機制及原理HTTP快取
- Linux系統下清空Cache快取Linux快取
- 【Cache】將常用的“小表”快取到Buffer Cache快取
- PbootCMS快取如何清理runtime資料夾下經常滿怎麼辦?清理快取的方法boot快取
- 在Buffer Cache中自動大表快取快取
- Android快取機制-LRU cache原理與用法Android快取
- Nginx 負載均衡的Cache快取批量清理的操作記錄Nginx負載快取
- mybatis的快取機制MyBatis快取
- mysql的快取機制MySql快取
- MyBatis 的快取機制MyBatis快取
- win10如何清理flash快取_win10清理fiash player快取的方法Win10快取
- 無鎖的資料結構(Lock-Free)及CAS(Compare-and-Swap)機制資料結構
- linux docker 清理快取LinuxDocker快取
- buffer cache 內部機制深入探索【一】
- 轉_Buffer Cache的原理及使用
- 從WebView快取聊到Http 的快取機制WebView快取HTTP
- node中的快取機制快取
- Linux Buffer/Cache 的區別Linux
- oracle buffer cache管理機制之lruw_dbwrOracle