
像任何其他的操作系統一樣,GNU / Linux已經有效地實施了內存管理甚至更多。但是,如果有任何進程正在蠶食你的內存,你要清除它,Linux提供了一個方法來刷新或清除RAM緩存。

在Linux中如何清除緩存?
每一個Linux系統有三個選項來清除緩存而不中斷任何進程或服務。
1,僅清除緩存頁
sync; echo 1 > /proc/sys/vm/drop_caches
2,清除目錄項和inodes
sync; echo 2 > /proc/sys/vm/drop_caches
3,清除,緩存頁,目錄項和inodes
sync; echo 3 > /proc/sys/vm/drop_caches
上述命令的說明:
sync將刷新文件系統緩存,命令通過「;」分隔,順序執行,shell等待終止在序列中的每一個命令執行之前。正如內核文檔中提到的,寫到drop_cache將清空緩存而不殺死任何應用程序/服務,echo命令做寫入文件的工作。
如果你必須清除磁碟高速緩存,第一個命令在企業和生產環境中是最安全,「…echo 1> …」只會清除頁緩存。
不建議使用上面第三個選項在生產環境中「…echo 3 >」 ,除非你明確自己在做什麼,因為它會清除緩存頁,目錄項和inodes。
在Linux上釋放Buffer和Cache要用到內核是否是個好主意?
當你請求許多設定想要檢查時,如果它實際上是專門實施對I/O 廣泛的基準測試,那麼你可能需要清除緩存。你可以如上所示刪除緩存,無需重新啟動系統即無需停機。
Linux被設計成它在尋找磁碟之前到磁碟緩存尋找的方式。如果它發現該資源在緩存中,則該請求不到達磁碟。如果我們清理緩存,磁碟緩存將沒有用處,系統會到磁碟上尋找資源。
此外,當清除緩存後它也將減慢系統運行速度,系統會重新載入每一個被請求的資源再次到磁碟緩存中。
現在,我們將通過一個cron任務調度器創建一個shell腳本在每天下午2點自動清除RAM緩存。
創建一個shell腳本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
現在,當你需要清除RAM緩存時只需要調用腳本。
現在設置一個定時任務來清除RAM緩存每天在下午2點,打開crontab進行編輯。
# crontab -e
添加以下行,保存並退出。
0 3 * * * /path/to/clearcache.sh
有關如何創建一個定時任務,更多細節你可以查看我們的文章11 Cron Scheduling Jobs。
在生產環境的伺服器上自動清除RAM是否是一個好主意?
不!它不是。想想一個情況,當你已經預定腳本來清除RAM緩存每天在下午2點。每天下午2點該腳本會執行並刷新你的RAM緩存。在一天中的任何時候,您網站用戶的在線量可能會超過預期的,並從你的伺服器請求資源。同時調度器運行著腳本,並在高速緩存中清除一切。當所有的用戶都從磁碟讀取數據時,這將導致伺服器崩潰並損壞資料庫。
因此,清除緩存僅在必要時並且在你的預料之中,否則你就是個Cargo Cult System Administrator。
如何清除Linux的交換空間?
如果你想清除交換空間,你可以運行下面的命令:
# swapoff -a && swapon -a
此外,了解有關風險後,您可能會將上面的命令添加到cron中。
現在,我們將上面兩種命令結合成一個命令寫出正確的腳本來同時清除RAM緩存和交換空間。
# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf 'n%sn' 'Ram-cache and Swap Cleared'
或
su -c 'echo 3 >/proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf 'n%sn' 'Ram-cache and Swap Cleared'
在測試上面的命令之前,我們先運行「free -m」 然後執行腳本檢查緩存。

就是現在,如果你喜歡這篇文章,不要忘記點個在看與轉發分享支持一下。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252467.html