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

2021-05-28 03:02:48 字數 1404 閱讀 4701

幾個關於顯看記憶體的命令:

top 之後可以按大寫m(按記憶體占用排序)p(按cpu占用排序)

free -m -s2 每隔2秒按兆位元組顯示記憶體使用情況

最近有個月經問題,老有人問為何開機後,還沒有其他服務,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的。

正確理解Linux記憶體使用

老有人問為何開機後,還沒有其他服務,mem就被用完了?是不是記憶體洩露?是否要重啟服務?只能說不要看現象,要看本質才能找到問題的根源。往往給出這樣的結果,懷疑記憶體用了90 mem 4146788k total,3825536k used,321252k free,213488k buffers s...

Linux記憶體占用過高排查過程

一朋友找我說,他們乙個專案的伺服器記憶體佔用率太高了,讓我幫忙看下怎麼回事。我正好不是太忙就幫他看了下,並記錄如下。1 檢視伺服器狀態 他的伺服器是阿里雲的ecs,系統是 centos linux release 7.5.1804 core 使用top命令看了下系統的狀態 在這裡插入描述 系統的整體...

Linux中Cache記憶體占用過高解決辦法

在linux系統中,我們經常用free命令來檢視系統記憶體的使用狀態。在乙個rhel6的系統上,free命令的顯示內容大概是這樣乙個狀態 這裡的預設顯示單位是kb,我的伺服器是128g記憶體,所以數字顯得比較大。這個命令幾乎是每乙個使用過linux的人必會的命令,但越是這樣的命令,似乎真正明白的人越...