在 Linux 上如何清除記憶體的 Cache、Buffer 和交換空間
像任何其他的作業系統一樣,GNU/Linux 已經實現的記憶體管理不僅有效,而且更好。但是,如果有任何程式正在蠶食你的記憶體,而你想要清除它的話,Linux 提供了一個重新整理或清除RAM快取方法。
如何在 Linux 中清除快取(Cache)?
每個 Linux 系統有三種選項來清除快取而不需要中斷任何程式或服務。
(LCTT 譯註:Cache,譯作“快取”,指 CPU 和記憶體之間快取記憶體。Buffer,譯作“緩衝區”,指在寫入磁碟前的儲存再記憶體中的內容。在本文中,Buffer 和 Cache 有時候會通指。)
- 僅清除頁面快取(PageCache)
# sync; echo 1 > /proc/sys/vm/drop_caches
- 清除目錄項和inode
# sync; echo 2 > /proc/sys/vm/drop_caches
- 清除頁面快取,目錄項和inode
# sync; echo 3 > /proc/sys/vm/drop_caches
上述命令的說明:
sync 將重新整理檔案系統緩衝區(buffer),命令通過“;”分隔,順序執行,shell在執行序列中的下一個命令之前會等待命令的終止。正如核心文件中提到的,寫入到drop_cache將清空快取而不會殺死任何應用程式/服務,echo命令做寫入檔案的工作。
如果你必須清除磁碟快取記憶體,第一個命令在企業和生產環境中是最安全,”…echo 1> …”只會清除頁面快取。 在生產環境中不建議使用上面的第三個選項”…echo 3 > …” ,除非你明確自己在做什麼,因為它會清除快取頁,目錄項和inodes。
在Linux上釋放也許被核心所使用的緩衝區(Buffer)和快取(Cache)是否是個好主意?
當你設定許多設定想要檢查效果時,如果它實際上是專門針對 I/O 範圍的基準測試,那麼你可能需要清除緩衝區和快取。你可以如上所示刪除快取,無需重新啟動系統(即無需停機)。
Linux被設計成它在尋找磁碟之前到磁碟快取尋找的方式。如果它發現該資源在快取中,則該請求不會傳送到磁碟。如果我們清理快取,磁碟快取就起不到作用了,系統會到磁碟上尋找資源。
此外,當清除快取後它也將減慢系統執行速度,系統會將每一個被請求的資源再次載入到磁碟快取中。
現在,我們將建立一個 shell 指令碼,通過一個 cron 排程任務在每天下午2點自動清除RAM快取。如下建立一個 shell 指令碼 clearcache.sh 並在其中新增以下行:
#!/bin/bash # 注意,我們這裡使用了 "echo 3",但是不推薦使用在產品環境中,應該使用 "echo 1" echo "echo 3 > /proc/sys/vm/drop_caches"
給clearcache.sh檔案設定執行許可權
# chmod 755 clearcache.sh
現在,當你需要清除記憶體快取時只需要呼叫指令碼。
現在設定一個每天下午2點的定時任務來清除RAM快取,開啟crontab進行編輯。
# crontab -e
新增以下行,儲存並退出。
0 3 * * * /path/to/clearcache.sh
有關如何建立一個定時任務,更多細節你可以檢視我們的文章 11 個定時排程任務的例子。
在生產環境的伺服器上自動清除RAM是否是一個好主意?
不!它不是。想想一個情況,當你已經預定指令碼在每天下午2點來清除記憶體快取。那麼其時該指令碼會執行並重新整理你的記憶體快取。在某一天由於某些原因,可能您的網站的線上使用者會超過預期地從你的伺服器請求資源。
而在這時,按計劃排程的指令碼執行了,並清除了快取中的一切。當所有的使用者都從磁碟讀取資料時,這將導致伺服器崩潰並損壞資料庫。因此,清除快取僅在必要時並且在你的預料之中,否則你就是個呆瓜系統管理員。
如何清除Linux的交換空間?
如果你想清除掉的空間,你可以執行下面的命令:
# swapoff -a && swapon -a
此外,瞭解有關風險後,您可以將上面的命令新增到cron中。
現在,我們將上面兩種命令結合成一個命令,寫成正確的指令碼來同時清除RAM快取和交換空間。
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '/n%s/n' 'Ram-cache and Swap Cleared'
或
su -c 'echo 3 > /proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '/n%s/n' 'Ram-cache and Swap Cleared'
在測試上面的命令之前,我們在執行指令碼前後執行“free -m” 來檢查快取。
就是這樣,如果你喜歡這篇文章,不要忘記向我們提供您寶貴的意見,讓我們知道,您認為在企業和生產環境中清除記憶體快取和緩衝區是否是一個好主意?
相關文章
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- 如何檢視 Linux 下 CPU、記憶體和交換分割槽的佔用率?Linux記憶體
- 教你如何進行 linux swap 交換記憶體擴容Linux記憶體
- Linux交換空間swap講解Linux
- linux系統swappiness引數在記憶體與交換分割槽間最佳化LinuxAPP記憶體
- 手動釋放Linux上的Swap、Buffer和CacheLinux
- 檢查交換空間: 可用的交換空間為 0 MB, 所需的交換空間為 150 MB。 未通過
- Linux使用者空間記憶體管理Linux記憶體
- Linux如何手動釋放Swap、Buffer和CacheLinux
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- 如何在 Linux 上建立和使用交換檔案Linux
- 效能測試必備知識(11)- 怎麼理解記憶體中的Buffer和Cache?記憶體
- JavaScript之記憶體空間JavaScript記憶體
- Linux Buffer/Cache 的區別Linux
- Linux 中交換空間 (swap)應該分多大才好?Linux
- 如何在Mac上釋放記憶體?Mac清除RAM教程Mac記憶體
- JVM記憶體分為3個記憶體空間JVM記憶體
- PCI-5565系列反射記憶體卡 反射記憶體交換機反射記憶體
- JavaScript的記憶體空間、賦值和深淺拷貝JavaScript記憶體賦值
- 簡單介紹在 Linux 上建立和使用交換檔案的方法Linux
- Linux下檢視CPU型號,記憶體大小,硬碟空間的命令Linux記憶體硬碟
- 10-記憶體空間佈局記憶體
- Linux工具效能調優系列二:buffer和cacheLinux
- JVM元空間Metaspace的記憶體結構JVM記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- PostgreSQL DBA(89) - Linux(Buffer vs Cache)SQLLinux
- Linux上執行記憶體中的指令碼和程式Linux記憶體指令碼
- 在Linux中,如何檢查系統的CPU和記憶體使用情況?Linux記憶體
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- redhat6.9增加swap交換空間大小Redhat
- Cache 和 Buffer 的區別在哪裡?
- MySQL入門--記憶體buffer poolMySql記憶體
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- 深入理解javascript系列(二):記憶體空間JavaScript記憶體
- ArkTS 的記憶體空間詳解:從 SemiSpace 到 HugeObjectSpace記憶體Object
- 靜態方法和普通的成員方法||分配記憶體空間的區別記憶體
- C#--得到物件在記憶體中的大小和把記憶體中的位元組轉換為字串C#物件記憶體字串
- 在Linux中,如何檢視linux中記憶體使用率最高的程序?Linux記憶體
- 利用Kubernetes名稱空間來管理記憶體和CPU資源(二)記憶體