1. 程式人生 > >linux 快取清理

linux 快取清理

linux下怎麼清理快取

 

free -m 命令可以檢視記憶體使用情況                   

sysctl 命令可以臨時改變某個系統引數 

如:sysctl -w net.ipv4.ip_forward=1

是將forware引數臨時改為1 當 service network restart後 失效.

 

https://img-blog.csdnimg.cn/20181219094611248

 

我們在清理快取前應該先

sync下

因為系統在操作的過程當中,會把你的操作到的檔案資料先儲存到buffer中去,因為怕你在操作的過程中因為斷電等原因遺失資料,所以在你操作過程中會把檔案資料先快取。

所以我們在清理快取先要先把buffe中的資料先寫入到硬碟中,sync命令

https://img-blog.csdnimg.cn/20181219094611268

上面的echo 3 是清理所有快取

echo 0 是不釋放快取

echo 1 是釋放頁快取

ehco 2 是釋放dentries和inodes快取

echo 3 是釋放 1 和 2 中說道的的所有快取

說明:
1>. /proc是一個虛擬檔案系統,我們可以通過對它的讀寫操作作為與kernel實體間進行通訊的一種手段。也就是說可以通過修改/proc中的檔案,來對當前kernel的行為做出調整。也就是說我們可以通過調整/proc/sys/vm/drop_caches來釋放記憶體。

0 – 不釋放
1 – 釋放頁快取
2 – 釋放dentries和inodes
3 – 釋放所有快取

數字1是用來清空最近放問過的檔案頁面快取

數字2是用來清空檔案節點快取和目錄項快取

數字3是用來清空1和2所有內容的快取。

2>. 關於drop_caches的官方說明如下:

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.

3>. Linux核心會將它最近訪問過的檔案頁面快取在記憶體中一段時間,這個檔案快取被稱為pagecache。

Inode是linux/unix作業系統中的一種資料結構,包含了各檔案相關的一些重要資訊。在建立檔案系統時,就會同時建立大量的inode。一般inode表會佔用檔案系統磁碟空間的1%。

 

目錄項快取(dcache)dentries

各引數含義:
total:總實體記憶體
used:已使用記憶體
free:完全未被使用的記憶體
shared:應用程式共享記憶體
buffers:快取,主要用於目錄方面,inode值等
cached:快取,用於已開啟的檔案
-buffers/cache:應用程式使用的記憶體大小,used減去快取值
+buffers/cache:所有可供應用程式使用的記憶體大小,free加上快取值

其中:
total = used + free
-buffers/cache=used-buffers-cached,這個是應用程式真實使用的記憶體大小
+buffers/cache=free+buffers+cached,這個是伺服器真實還可利用的記憶體大小


[[email protected] ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:         32096      10379      21717          0         38       7942
-/+ buffers/cache:       2398      29698
Swap:        34287          0      34287
這裡面的第二行才是真正伺服器的空閒記憶體

 

2. Linux的記憶體分配方式

大家都知道,Linux伺服器為了提高效率,會提前申請記憶體,即使這些記憶體沒有被具體應用使用,Linux也會提前申請這些記憶體,然後利用這些記憶體做快取用,即將剛開啟的檔案系統存入cache中,這樣對應的伺服器free值會越來越少,buffers和cached會越來越大,因此給大家表象就是記憶體越來越少了,大家就緊張了;其實,大家完全不用緊張,Linux伺服器在發現記憶體不足時,會自動清理cached區域,釋放記憶體,然後繼續增大cache,free繼續減少。因此,那樣手動降低記憶體使用率的方法,其實就是圖一時之快,呵呵。

echo 1 > /proc/sys/vm/drop_caches 可以暫時清空cache和buffer

在rhel5和Ubuntu上(rhel4不可以),可以直接修改核心檔案
# /etc/sysctl.conf
vm.drop_caches = 1

#sysctl -p 

 

 $ sync
$ free -m
             total       used       free     shared    buffers     cached
Mem:         32096      30084       2011          0        590      26162
-/+ buffers/cache:       3332      28764
Swap:        34287          0      34287
echo 3 > /proc/sys/vm/drop_caches
free -m

 

原本以為是oracle快取佔滿了,

在SQLPLUS中輸入

ALTER SYSTEM FLUSH BUFFER_CACHE;

alter system flush shared_pool;

 但是看了一下效果不明顯

 後面試試Linux清除ARP快取
一、 arp -n|awk '/^[1-9]/ {print "arp -d "$1}' | sh
清除所有ARP快取,推薦!
二、for((ip=2;ip<255;ip++));do arp -d 192.168.0.$ip &>/dev/null;done
清除192.168.0.0網段的所有快取
三、arp -d IP
這樣可以清除單一IP 的ARP快取

注意:以上均需要root許可權,尤其是最後一個,如果不再root下執行,則改為:

arp -n|awk '/^[1-9]/ {print "arp -d "$1}' | sudo sh