像任何其餘的操做系統同樣,GNU / Linux已經有效地實施了內存管理甚至更多。可是,若是有任何進程正在蠶食你的內存,你要清除它,Linux提供了一個方法來刷新或清除RAM緩存。node
每個Linux系統有三個選項來清除緩存而不中斷任何進程或服務。linux
1,僅清除緩存頁shell
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命令作寫入文件的工做。bash
若是你必須清除磁盤高速緩存,第一個命令在企業和生產環境中是最安全,「…echo 1> …」只會清除頁緩存。服務器
不建議使用上面第三個選項在生產環境中「…echo 3 >」 ,除非你明確本身在作什麼,由於它會清除緩存頁,目錄項和inodes。app
在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。
若是你想清除交換空間,你能夠運行下面的命令:
# 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」 而後執行腳本檢查緩存。
就是如今,若是你喜歡這篇文章,不要忘記點個在看與轉發分享支持一下。
原文: http://www.tecmint.com/clear-...