清除Linux緩存

       今天用spot on light 查了一下開發服務器的內存佔用,只剩下60MB用下面的方法就可以實現清空緩存頻繁的文件訪問會導致系統的Cache使用量大增首先使用free -m查看剩餘內存
[root@Oracle ~]# free -m
                                     total       used       free     shared    buffers     cached
Mem:                            3383       3319         63          0         97       2395
-/+ buffers/cache:         826         2556
Swap:                           1983       195       1788


       total 內存總數  used 已經使用的內存數 free 空閒的內存數 shared 多個進程共享的內存總額

說明,釋放前最好sync一下,防止丟數據。

使用方式 : sync
使用說明 : Linux 系統中欲寫入硬盤的資料有的時候會了效率起見,

     會寫到 filesystem buffer 中,這個 buffer 是一塊記憶體空間,

     如果欲寫入硬盤的資料存於此 buffer 中,而系統又突然斷電的話,

     那麼資料就會流失了,sync 指令會將存於 buffer 中的資料強制寫入硬盤中。


 

[root@oracle ~]# echo 1 > /proc/sys/vm/drop_caches
[root@oracle ~]# sysctl -p


[root@oracle ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3383       1952       1431          0          1       1136
-/+ buffers/cache:        814       2568
Swap:         1983        195       1788
 

說明:
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公社網站(
www.linuxidc.com)  原文鏈接:http://www.linuxidc.com/Linux/2012-04/58184.htm

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章