天天看點

linux移動清空檔案夾排程,如何在Linux中清除緩存(Cache)

Cache:“緩存”,指 CPU 和記憶體之間高速緩存。

Buffer:“緩沖區”,指在寫入磁盤前的存儲再記憶體中的内容。

每個 Linux 系統有三種選項來清除緩存而不需要中斷任何程序或服務。

如何在 Linux 中清除緩存(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

自動清理RAM好與壞

在生産環境的伺服器上自動清除RAM是否是一個好主意?

不!它不是。想想一個情況,當你已經預定腳本在每天下午2點來清除記憶體緩存。那麼其時該腳本會執行并重新整理你的記憶體緩存。在某一天由于某些原因,可能您的網站的線上使用者會超過預期地從你的伺服器請求資源。

而在這時,按計劃排程的腳本運作了,并清除了緩存中的一切。當所有的使用者都從磁盤讀取資料時,這将導緻伺服器崩潰并損壞資料庫。是以,清除緩存僅在必要時并且在你的預料之中,否則你就是個呆瓜系統管理者。