天天看點

linux下怎麼清理緩存

free -m 指令可以檢視記憶體使用情況                   sysctl 指令可以臨時改變某個系統參數  如:sysctl -w net.ipv4.ip_forward=1 是将forware參數臨時改為1 當 service network restart後 失效.

linux下怎麼清理緩存

我們在清理緩存前應該先

sync下

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

是以我們在清理緩存先要先把buffe中的資料先寫入到硬碟中,sync指令

linux下怎麼清理緩存

上面的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,這個是伺服器真實還可利用的記憶體大小

[oracle@cddserver1 ~]$ 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

linux下怎麼清理緩存