Linux內存(手動釋放cache)


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

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。

 


免責聲明!

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



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