正確理解Linux記憶體使用

2021-06-22 13:29:32 字數 1314 閱讀 8435

老有人問為何開機後,還沒有其他服務,mem就被用完了?是不是記憶體洩露?是否要重啟服務?只能說不要看現象,要看本質才能找到問題的根源。

往往給出這樣的結果,懷疑記憶體用了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的。

正確理解 clear both

要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳細分析...

正確理解 clear both

原文 要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳...

正確理解 clear both

要注意以下幾點 1 浮動元素會被自動設定成塊級元素,相當於給元素設定了display block 塊級元素能設定寬和高,而行內元素則不可以 2 浮動元素後邊的非浮動元素顯示問題。3 多個浮動方向一致的元素使用流式排列,此時要注意浮動元素的高度。4 子元素全為浮動元素的元素高度自適應問題。以下詳細分析...