如何在Linux上清理內存緩存、緩沖與交換空間
與其他類型的操作系統一樣,GNU/Linux已經有效的實現了內存管理,甚至更加優秀。但是如果任何進程正在吃光你的內存,並且你想清理它,Linux提供了一種刷新或清除內存緩存的方法。
如何在Linux中清除緩存?
每個Linux系統都有三個選項可以在不中斷任何進程或服務的情況下清除緩存。
1 只清除頁面緩存(pagecache)
# sync; echo 1 > /proc/sys/vm/drop_caches
2 清除目錄項和inode
# sync; echo 2 > /proc/sys/vm/drop_caches
3 清除頁面緩存、目錄項和i節點
# sync; echo 3 > /proc/sys/vm/drop_caches
上述命令的解釋
sync命令將刷新文件系統緩沖區。分號(;)分隔的命令依次執行。在執行序列中的下一個命令之前,shell等待每個命令終止。如內核文檔中提到的,寫入drop_cache將清除緩存而不會終止任何應用程序或服務。echo命令正在做的任務就是寫入文件。
如果你必須清除磁盤緩存,在企業和生產環境中第一個命令(“...echo 1>...”)是最安全的,它將僅僅只清除頁面緩存。生產環境中不推薦使用上述第三個選項("...echo 3 >..."),直到你知道你正在做什么。因為它會清除頁面緩存,目錄項和i節點。
在Linux中釋放可能被Linux內核使用的緩沖區和緩存是一個好主意嗎?
當你正應用各種設定並想檢查時,如果它實際上是專門在I / O擴展基准測試上實現的,那么你可能需要清除緩沖區緩存。你可以按照上面解釋的方式刪除緩存而無需重啟操作系統,即無需停機。
Linux被設計成這樣一種方式,它在查看磁盤之前先查看磁盤緩存。如果它發現資源在緩存中,然后相應的請求不會去到磁盤。如果我們清理了緩存,磁盤緩存將沒有那么有用,因為操作系統將在磁盤上查找資源。
更進一步說當緩存被清理它會使系統減速幾秒鍾,同時操作系統所需的所有資源將再次加載到磁盤緩存中。
現在我們將編寫一個shell腳本,通過計划任務在每天凌晨的2點來自動清除內存緩存。編寫一個名為clearcache.sh的腳本,添加以下內容:
#!/bin/bash
# Note, we are using "echo 3", but it is not recommended in production instead use "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"
給clearcache.sh腳本賦予執行權限
# chmod 755 clearcache.sh
現在,你可以在任何你被請求清除內存緩存的時候調用該腳本。
現在,設定一個每個凌晨2點清除緩存的計划任務。打開crontab進行編輯。
# crontab -e
追加下面的行,保存並退出,使腳本在每天凌晨2點運行。
0 2 * * * /path/to/clearcache.sh
在生產服務器上清理內存緩存是個好主意嗎?
不,它不是。考慮這樣一種情形,當你已經計划了該腳本在每天的凌晨2點自動清理緩存。每天凌晨2點腳本將被執行,它新刷你的內存緩存。某天,無論出於某種原因,也許是超出預期的用戶在線訪問你的網站並在你的服務器尋求資源。
與些同時計划任務腳本執行並清除了緩存中的所有東西。現在,所有的用戶將從硬盤獲取數據。這將導致服務器崩潰和損壞數據庫。因此,僅在需要的時候清除內存緩存並且知道你正在做什么 ,否則你就是一個貨物崇拜的管理員。(參考貨物崇拜編程解釋: 這個名詞有時也指不熟練的或沒經驗的程序員從某處拷貝代碼到另一處,卻並未深入了解其代碼是如何工作的,或者不清楚在新的地方是否需要這段代碼。也可以指不正確或過份的應用設計模式、代碼風格或編程方法,卻不清楚其原理。)
如何在Linux中清除交換空間?
如果你想清除交換空間,你可以執行以下命令。
# swapoff -a && swapon -a
在了解了所有相關風險以后,你也可以增加上述的命令到clearcache.sh計划任務腳本。
現在我們將通過把上述兩條命令組合到一起來生成一條合適的腳本,以清除內存緩存和交換空間。
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'
OR
$ su -c "echo 3 >'/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'" root
測試以上兩條命令以后,在執行上述腳本的前后我們將通過運行“free -h”命令來檢查緩存。

到此為止,如果你喜歡這篇文章,別忘記在評論區提供有價值的反饋讓我們知道。在生產和企業環境中你認為還有哪些好主意來清除內存緩存和緩沖區。
原文地址:https://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/
