歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> 手工釋放Linux系統進程占用的內存

手工釋放Linux系統進程占用的內存

日期:2017/3/2 16:33:54   编辑:Linux服務器

總有很多朋友對於Linux的內存管理有疑問,之前一篇linux下的內存管理方式似乎也沒能清除大家的疑慮。而在新版核心中,似乎對這個問題提供了新的解決方法,特轉出來給大家參考一下。最後,還附上我對這方法的意見,歡迎各位一同討論。

  當在Linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作為caching。這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法。那麼我來談談這個問題。

  一、通常情況

  先來說說free命令:

  [root@server ~]# free -m

  total used free shared buffers cached

  Mem: 249 163 86 0 10 94

  -/+ buffers/cache: 58 191

  Swap: 511 0 511

  其中:

  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

  有了這個基礎後,可以得知,我現在used為163MB,free為86MB,buffer和cached分別為10MB,94MB。

  那麼我們來看看,如果我執行復制文件,內存會發生什麼變化.

  [root@server ~]# cp -r /etc ~/test/

  [root@server ~]# free -m

  total used free shared buffers cached

  Mem: 249 244 4 0 8 174

  -/+ buffers/cache: 62 187

  Swap: 511 0 511

  在我命令執行結束後,used為244MB,free為4MB,buffers為8MB,cached為174MB,天吶,都被cached吃掉了。別緊張,這是為了提高文件讀取效率的做法。

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

  那麼有人說過段時間,linux會自動釋放掉所用的內存。等待一段時間後,我們使用free再來試試,看看是否有釋放?

  [root@server test]# free -m

  total used free shared buffers cached

  Mem: 249 244 5 0 8 174

  -/+ buffers/cache: 61 188

  Swap: 511 0 511

  似乎沒有任何變化。(實際情況下,內存的管理還與Swap有關)

  那麼我能否手動釋放掉這些內存呢?回答是可以的!

  二、手動釋放緩存

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

  [root@server test]# cat /proc/sys/vm/drop_caches

  0

  首先,/proc/sys/vm/drop_caches的值,默認為0。

  [root@server test]# sync

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

  [root@server test]# echo 3 > /proc/sys/vm/drop_caches

  [root@server test]# cat /proc/sys/vm/drop_caches

  3

  將/proc/sys/vm/drop_caches值設為3

  [root@server test]# free -m

  total used free shared buffers cached

  Mem: 249 66 182 0 0 11

  -/+ buffers/cache: 55 194

  Swap: 511 0 511

  再來運行free命令,會發現現在的used為66MB,free為182MB,buffers為0MB,cached為11MB。那麼有效的釋放了buffer和cache。

  ◎ 有關/proc/sys/vm/drop_caches的用法在下面進行了說明

  /proc/sys/vm/drop_caches (since Linux 2.6.16)

  Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to become free.

  To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;

  to free dentries and inodes, use ech12下一頁

Copyright © Linux教程網 All Rights Reserved