像任何其他的作業系統一樣,GNU / Linux已經有效地實施了記憶體管理甚至更多,但是,如果有任何行程正在蠶食你的記憶體,你要清除它,Linux提供了一個方法來重繪或清除RAM快取,
在Linux中如何清除快取?
每一個Linux系統有三個選項來清除快取而不中斷任何行程或服務,
1,僅清除快取頁
sync; echo1>/proc/sys/vm/drop_caches
2,清除目錄項和inodes
sync; echo2>/proc/sys/vm/drop_caches
3,清除,快取頁,目錄項和inodes
sync; echo3>/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 areusing"echo 3", but it isnotrecommended 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
添加以下行,保存并退出,
03***/path/to/clearcache.sh
有關如何創建一個定時任務,更多細節你可以查看我們的文章11 Cron Scheduling Jobs,
在生產環境的服務器上自動清除RAM是否是一個好主意?
不!它不是,想想一個情況,當你已經預定腳本來清除RAM快取每天在下午2點,每天下午2點該腳本會執行并重繪你的RAM快取,在一天中的任何時候,您網站用戶的在線量可能會超過預期的,并從你的服務器請求資源,同時調度器運行著腳本,并在高速快取中清除一切,當所有的用戶都從磁盤讀取資料時,這將導致服務器崩潰并損壞資料庫,
因此,清除快取僅在必要時并且在你的預料之中,否則你就是個Cargo Cult System Administrator,
如何清除Linux的交換空間?
如果你想清除交換空間,你可以運行下面的命令:
# swapoff -a && swapon -a
此外,了解有關風險后,您可能會將上面的命令添加到cron中,
現在,我們將上面兩種命令結合成一個命令寫出正確的腳本來同時清除RAM快取和交換空間,
#echo3 > /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” 然后執行腳本檢查快取,
如果你對編程感興趣,想要深入學習,這里分享素材包及學習資源,還有免費教程哦(包含C語言、C++、Windows、Qt、Linux相關知識點)~不論是小白還是進階者,在這里都能獲得成長,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/184916.html
標籤:其他
上一篇:[GO]解決request origin not allowed by Upgrader.CheckOrigin websocket跨域
下一篇:Druid 的整合
