正確理解Linux記憶體佔用過高的問題

來源:互聯網
上載者:User

    可能大多數使用 top 查看當前記憶體使用量率是都有一個疑問:  為什麼我一開機或者基本沒開什麼程式記憶體就佔用的產不多了呢?

往往給出這樣的結果,懷疑記憶體用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

      這樣懷疑很普遍,因為很多人用慣了Windows。Windows下,可以使用工作管理員查看當前進程對於記憶體的消耗情況。在我看來,Windows實體記憶體總是留下一定的空間,就算此時實體記憶體有空閑時,也會讓某些程式去使用虛擬記憶體,目的是在Windows下啟動新程式時,直接分配閒置實體記憶體,這樣子新程式啟動速度就較快,而Linux則不然。

而在Linux下,使用top命令看到記憶體佔用情況:

Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

這裡的結果顯示使用了3.8G的used,佔用率達到90%。看看free的結果你還可以對比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588

雖然MEM顯示了3.7G左右的used,但是(-/+ buffers/cache)減去buffers和cache的結果可以看到,當前進程實際佔用記憶體是636M,而可用空閑(free)記憶體為3.4G。

可以這麼理解:在linux的記憶體配置機制中,優先使用實體記憶體,當實體記憶體還有空閑時(還夠用),不會釋放其佔用記憶體,就算佔用記憶體的程式已經被關閉了,該程式所佔用的記憶體用來做緩衝使用,對於開啟過的程式、或是讀取剛存取過得資料會比較快。

如上面的例子:使用了4G的記憶體,3.7G被佔用,但是buuffer和cached部分作為緩衝,可以使用命中率的方式提高使用效率,而且這部分緩衝是根據指令隨時可以釋放的,我們可以認為這部分記憶體沒有實際被使用,也可以認為它是閒置。

因此查看目前進程正在實際被使用的記憶體,是used-(buffers+cache),也可以認為如果swap沒有大量使用,mem還是夠用的,只有mem被當前進程實際佔用完(沒有了buffers和cache),才會使用到swap的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.