Ubuntu下如何清理記憶體

alan00000發表於2012-11-30

ubuntu的圖形介面用的是gnome,我發現ubunut用gnome老是死,如果工作八個小時,要死二,三次搞得我很鬱悶。家裡的centos用的也是gnome,就不會死,並且家裡電腦記憶體還小。

  1. root@ubuntu:/home/zhangying# free -m  
  2.               total       used       free     shared    buffers     cached  
  3. Mem:          3449       2123       1325          0        576        777  
  4. -/+ buffers/cache:        769       2680  
  5. Swap:          254          0        254  

被buffers,cached等佔去的記憶體,釋放的很慢,導致可用記憶體不夠用。公司電腦的記憶體可是3.5G啊,這都不夠它佔的,真是無語。

解決方法:

1,vim free.sh建個指令碼

  1. free -m |grep -i mem |awk '{if($4 < 300){ printf("3") > "/proc/sys/vm/drop_caches"}}';  

printf("3") > 可改為echo 3 >

簡單解釋一下,檢視一下記憶體使用情況,找到記憶體所在行。判斷可用記憶體大小,如果小於300M,就釋放記憶體。drop_caches檔案中就一個0,這裡為什麼要寫入一個3呢?官方解釋如下:

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

to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;

to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.

2,加到crontab中去

crontab 對守護程式負責,守護程式按照crontab內容週期性的做指定操作

sudo su

crontab -e

  1. */05 * * * * /home/zhangying/free.sh  
  2. */01 * * * * /home/china/webroot/free.sh

注意:

1,crontab要以root的許可權去執行,普通使用者是沒有drop_caches寫的許可權的。

2,根據系統的不同,*/05 * * * * /home/zhangying/free.sh,每隔5分鐘執行一次,有的寫法是*/5 * * * * /home/zhangying/free.sh,這種方式在ubuntu10.10下,我試了不行。

#這裡注意,直接開啟etc下的crontab修改就可以,格式按照檔案中給出的樣式就行


2. Linux的記憶體分配方式

大家都知道,Linux伺服器為了提高效率,會提前申請記憶體,即使這些記憶體沒有被具體應用使用,Linux也會提前申請這些記憶體,然後利用這些記憶體做快取用,即將剛開啟的檔案系統存入cache中,這樣對應的伺服器free值會越來越少,buffers和cached會越來越大,因此給大家表象就是記憶體越來越少了,大家就緊張了;其實,大家完全不用緊張,Linux伺服器在發現記憶體不足時,會自動清理cached區域,釋放記憶體,然後繼續增大cache,free繼續減少。因此,那樣手動降低記憶體使用率的方法,其實就是圖一時之快,呵呵。


相關文章