歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 清除Linux緩存

清除Linux緩存

日期:2017/2/28 15:53:31   编辑: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
Copyright © Linux教程網 All Rights Reserved