使用top命令,free命令看到的記憶體占用和實際占用為什麼不符合,看到不是真實的?

時間 2021-06-02 14:00:56

1樓:南盼

很正常,top命令對程序資源的統計方式有問題。

如下圖,是在一台32核128G記憶體伺服器上擷取的資料。可以看到我的樣例程式a.out的cpu使用率為1001%,記憶體使用率為152%。

這是因為我的程式是乙個16執行緒的程式,且每個執行緒都對同乙個大約12G的共享記憶體進行了對映。

可以看出,top在計算cpu使用率時,應該是每個執行緒各自算cpu時間,然後把cpu時間加在一起,再與程式的執行時間算比值。這樣就會出現超過100%的cpu使用率了。

類似的,top在計算記憶體使用率時,也是用相似的方法,將各個執行緒所申請的記憶體直接疊加在一起,再和總的記憶體大小做比較。注意,VIRT,RES,SHRS欄位也是用這種方法計算的。可以明顯看出對於我的樣例程式來說,以上這些字段,尤其是RES(程序所使用的物理記憶體大小)欄位的值都在180G以上,遠超伺服器的實際記憶體128G。

與此同時,再看第三行的整體統計結果顯示,未使用記憶體大約在70G左右,這個資料與我的伺服器實際情況相符。

由上述可得,top這個命令在統計存在多執行緒和共享記憶體的程序的資源時,確實存在缺陷

2樓:陳富林

Linux為了「提高」磁碟的讀寫速度建立緩衝區的機制,你把top 的free + buffer+ cache 看一下,就知道是什麼意思了。

3樓:Chander.Pan

樓主請注意快取這個東西,Linux核心在程式退出後並不會馬上釋放記憶體,而是留著,等下次啟動時可以快速呼叫。如果啟動了其他程式,核心才會釋放快取給其他程式用,快取就是那個cached,實際用的記憶體是used減去cached。你可以用清除快取的命令把快取清空,這時候就能清楚看到了。

手機碼字,忘記清除快取命令了,你可以搜一下。

4樓:run.pyc

簡單粗暴地貼個搜尋的結果的redhat.com 的頁面(話說知乎到底怎麼改超鏈的描述)

大概意思就是,linux在記憶體管理上,傾向於盡量多地使用記憶體來提高讀寫的效能,因此你程式執行結束後cached的內容並不會馬上被釋放,方便下一次讀取。

free命令顯示的內容,第一行的資料是以系統視角看的,第二行的資料是以應用程式的視角看的。

第一行的used一項,其資料不單包含程式使用的記憶體,還包含buffers跟cached的記憶體,因此看上去可用的記憶體很少。

第二行的資料,分別是used-buffers-cached,跟free+buffers+cached,算了一下程式總的記憶體使用率是(total - free - buffers - cached) / total = 0.038 左右,因此top顯示一列0.0也沒什麼問題。

Deepin系統使用ifconfig命令無法檢視到本機ip,非虛擬機器,怎麼辦?

大澤Official wlp開頭那個網絡卡就是您的無線網絡卡 IP 192.168.43.71 enp開頭的是您的有線網絡卡 貌似沒接網線 之前Linux網絡卡顯示方法改過一回,以前是ethN和wlanN,現在改成了enpNsN和wlpNsN N是任意乙個數字,新版的網絡卡命名和物理位置有關 不知道...

誰還知道linux失傳已久的top命令和p s命令是幹啥的? ?

一笙 top動態檢視系統各項負載以及程序的cpu和記憶體的使用率,還有乙個加強版的,是htop命令,感興趣可以研究一下。ps這個命令不加引數的話沒什麼意義,一般來說用的多的引數是ps ef 普遍的用法是ps ef grep 來檢視系統中查詢的這個程序有沒有在執行。 李華 既然問題改了的話,ps查詢程...

高校校園網,發現使用tracert命令就能打通IPv6?

iakc 我來提乙個猜想。校園網的交換機應該配置了基於IP協議型別的VLAN,就是說IPv4業務和IPv6業務是在不同的VLAN下邊,對應的出口應該也不一樣。所以,是否可以把本地連線屬性裡邊的IPv4前面的對勾去掉再試一下?不知題主學校有沒有網路實驗室?可以去實驗室搭個環境測試一下。 龍泉大寶劍 現...