linux 緩存手動清除


linux下怎么清理緩存

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM