如何手工釋放Linux內存

在最近的Java web項目中,進行資源文件轉換時,當Linux物理內存過小時,總會轉換失敗,是因爲當在Linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作爲caching。這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法。那麼我來談談這個問題。

先來說說free命令:

[root@docker12 /]# free -m
             total       used       free     shared    buffers     cached
Mem:          7857       7671        186          0         41       1472
-/+ buffers/cache:       6157       1699
Swap:         8127       5556       257
其中,

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


爲了提高磁盤存取效率,Linux做了一些精心的設計,除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換),還採取了兩種主要Cache

方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,ge

tdents)的時間。


手工釋放內存:

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


[root@docker12 /]# cat /proc/sys/vm/drop_caches  
 
0  
 
首先,/proc/sys/vm/drop_caches的值,默認爲0。  

 
[root@docker12 /]# sync 

手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)


[root@docker12 /]# echo 3 > /proc/sys/vm/drop_caches  
 
[root@docker12 /]# cat /proc/sys/vm/drop_caches  
 
3  
 
將/proc/sys/vm/drop_caches值設爲3,再執行free命令,查看內存:
 
[root@docker12 /]# free -m
             total       used       free     shared    buffers     cached
Mem:          7857       7349        508          0          2       1193
-/+ buffers/cache:       6152       1704
Swap:         8127       5580       2547









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