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

我們在清理緩存前應該先
sync下
因為系統在操作的過程當中,會把你的操作到的檔案資料先儲存到buffer中去,因為怕你在操作的過程中因為斷電等原因遺失資料,是以在你操作過程中會把檔案資料先緩存。
是以我們在清理緩存先要先把buffe中的資料先寫入到硬碟中,sync指令
上面的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