1. 程式人生 > >Linux內存(手動釋放cache)

Linux內存(手動釋放cache)

nc命令 hardware 指標 調整 存取 目的 nbsp tac syn

項目的擴容申請了一臺機器,到手之後看一下機器的指標,看到內存使用情況是這樣的。

1、查看內存

free

$ free -h
             total       used       free     shared    buffers     cached
Mem:          125G        89G        36G        92K       212M        74G
-/+ buffers/cache:        14G       111G 
Swap:         7.5G       1.8G       5.6G 

cat /proc/meminfo

如果你想得到更加相近的信息可以使用cat /proc/meminfo,直接看硬件的統計數據。

MemTotal:       131755760 kB
MemFree:        38151680 kB
Buffers:          217564 kB
Cached:         78274852 kB
SwapCached:         6072 kB
Active:         29647292 kB
Inactive:       50949268 kB
Active(anon):    2073604 kB
Inactive(anon):    30640 kB
Active(file
): 27573688 kB Inactive(file): 50918628 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 7812092 kB SwapFree: 5889924 kB Dirty: 804 kB Writeback: 0 kB AnonPages: 2100436 kB Mapped: 442904 kB Shmem: 92 kB Slab:
12017476 kB SReclaimable: 11910264 kB SUnreclaim: 107212 kB KernelStack: 31184 kB PageTables: 37492 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 73689972 kB Committed_AS: 25708340 kB VmallocTotal: 34359738367 kB VmallocUsed: 491656 kB VmallocChunk: 34290629896 kB HardwareCorrupted: 0 kB AnonHugePages: 694272 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 4096 kB DirectMap2M: 2019328 kB DirectMap1G: 132120576 kB

這裏我們看到,內存總數total=125G,已使用used=89G,空閑free=36G,cache=78G。其他類型不等。

先解釋一下:

total 內存總數
used 已經使用的內存數
free 空閑的內存數
shared 多個進程共享的內存總額
buffers Buffer Cache和cached Page Cache 磁盤緩存的大小
-buffers/cache (已用)的內存數:used - buffers - cached
+buffers/cache(可用)的內存數:free + buffers + cached
可用的memory=free memory+buffers+cached

這裏可以看到我們使用了89G,其中cache占用了78G。這個占用有點高,並且不會自動釋放。

2、什麽是cache

為了提高磁盤存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換),還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。

cached主要負責緩存文件使用, 日誌文件過大造成cached區內存增大把內存占用完 .

Free中的buffer和cache:(它們都是占用內存):
buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區
cache: 作為page cache的內存, 文件系統的cache
如果 cache 的值很大,說明cache住的文件數很多。

3、手動釋放cache

/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段。也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整。那麽我們可以通過調整/proc/sys/vm/drop_caches來釋放內存。

釋放方法有三種(系統默認值是0,釋放之後你可以再改回0值):

To free pagecache: echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches

註意:在清空緩存前我們需要在linux系統中執行一下sync命令,將緩存中的未被寫入磁盤的內容寫到磁盤上

具體的操作如下

# 先查看一下釋放cache信令值, 此時應該是0
$ cat /proc/sys/vm/drop_caches 
0

# 將緩沖區寫入磁盤, 當需要停止系統的時候, 保證文件系統的完整性
$ sync

# 釋放cache, 這個命令可能要花費一點時間, 請耐心等待
$ echo 3 > /proc/sys/vm/drop_caches
# 再看一眼
$ cat /proc/sys/vm/drop_caches 
3

再來看一眼內存

$ free -h
             total       used       free     shared    buffers     cached
Mem:          125G       3.5G       122G        88K        13M       444M
-/+ buffers/cache:       3.1G       122G 
Swap:         7.5G       1.8G       5.6G 

cache已經釋放,free=122G。

Linux內存(手動釋放cache)