作者 主題: 如何釋放 Memory cached  (閱讀 1811 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
如何釋放 Memory cached
« 於: 2011-08-13 11:59 »
這是老問題吧, 常常出現的情形就是
明明 cached 裡有好幾 GB (常常只是因為複製一些檔案)
但是卻還是會吃到 swap, 尤其是在開 VM 時如果吃到 swap
guest 就會頓頓的.

今天在站內爬文時看到這篇

http://phorum.study-area.org/index.php/topic,39976.msg200660.html#msg200660

原文裡提到:

引用
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".

As this is a non-destructive operation and dirty objects are not freeable,
the user should run `sync' first


所以就試了一下,

代碼: [選擇]
(top)
Mem:   8066064k total,  7687288k used,   378776k free,    20972k buffers
Swap:  8000360k total,        0k used,  8000360k free,  2659564k cached

# sync
# echo 3 > /proc/sys/vm/drop_caches

(top)
Mem:   8066064k total,  5098064k used,  2968000k free,     1312k buffers
Swap:  8000360k total,        0k used,  8000360k free,   132936k cached

確實有釋放了, 而且運作中的程式、軟體都正常, 系統 log 也沒任何錯誤或警告訊息
把指令寫到 script 裡

$ vim bin/releaseCached.sh

代碼: [選擇]
#!/bin/sh

sync
echo 3 > /proc/sys/vm/drop_caches

(wq!)

然後在桌面建立捷徑, 這樣就可以隨時按一下來釋放 memory cached 了
(sudo sh /home/xxxxx/bin/releaseCached.sh)

 :D