檢視linux的程序到底用了多少記憶體

2021-06-28 07:43:16 字數 4180 閱讀 3036

1. 在linux下,檢視乙個執行中的程式, 占用了多少記憶體, 一般的命令有

(1). ps aux:

其中  vsz(或vss)列 表示,程式占用了多少虛擬記憶體。

rss列 表示, 程式占用了多少物理記憶體。

虛擬記憶體可以不用考慮,它並不占用實際物理記憶體。

(2). top 命令也可以

其中  virt(或vss)列  表示,程式占用了多少虛擬記憶體。 同 ps aux 中的 vsz列

res列 表示, 程式占用了多少物理記憶體。同 ps aux 中的rss列

2.在linux下, 檢視當前系統占用了多少記憶體, 一般的命令是  free

其中, free就是系統還有多少記憶體可以使用。

但由於 linux 系統對記憶體使用有乙個原則, 就是, 記憶體是寶貴的, 能使用多少就使用多少。 所以, linux會把已經呼叫過的包快取起來,放在記憶體裡。

這樣,實際上,可以使用的記憶體,就可以理解為, free+buffers+cached

3.當你了解完這些命令以後, 再去使用ps aux 命令去檢視的時候, 會發現乙個奇怪的現象。

所有的  rss 列的資料,加起來, 比物理記憶體的數要大很多。

比如, 物理記憶體為2g, 而rss列的資料加起來,可能有5個g之多, 這是怎麼回事了?

這是因為rss列的值騙了我們。

linux的記憶體機制是這樣的:

在執行乙個程式時, linux會呼叫該程式依賴的鏈結庫, 如lib.xx.so。 首先看該鏈結庫是否被對映進記憶體中,如果沒有被對映,則將**段與資料段對映到記憶體中,否則只是將其加入程序的位址空間。

這樣,當n個程式,依賴到lib.xx.so的時候, 實際上,記憶體中只有乙個lib.xx.so ,而不是n個。

而rss在顯示乙個程式占用的實際物理記憶體時, 將lib.xx.so也算了進來。

比如, x程式, 本身占用記憶體為5m, lib.xx.so 占用記憶體2m,lib.xx.so被n個程式共享依賴。 則rss顯示為,x程式執行,占用記憶體為7m。 實際上, x程式占用了5m空間。 多餘的2m被討入到rss中了。

當你在用ps aux顯示記憶體占用情況時, n個共享依賴lib.xx.so的n個程式,都把這2m空間,算在自己的rss中了, 這樣rss的sum值,就比實際物理記憶體多了。

當然, linux的記憶體使用機制很複雜, 不是一句兩句能說清楚的。這裡只是簡單的說明了一下, ps aux中的rss值, 並不能真實反映物理記憶體的使用情況。

4. 如果檢視更詳細的記憶體使用情況, 可用以下幾種方法, 或者幾種方法結合使用:

這幾種方法,都需要root賬戶的許可權

(1). pmap -d $pid

$pid 是正在執行的程式的pid

(2). cat /proc/$pid/smaps

smaps的資料比較詳細,可簡單的歸納一下,歸納的命令如下:

cat /proc/$pid/smaps  | awk '/size|rss|pss|shared|private|referenced|swap/end'

(3). cat /proc/$pid/maps

(4). cat /proc/$pid/statm

輸出解釋

第一列  size:任務虛擬位址空間大小

第二列  resident:正在使用的物理記憶體大小

第三列  shared:共享頁數

第四列  trs:程式所擁有的可執行虛擬記憶體大小

第五列  lrs:被映像倒任務的虛擬記憶體空間的庫的大小

第六列  drs:程式資料段和使用者態的棧的大小

第七列 dt:髒頁數量

(5). vmstat

這個命令據說也可以提供一些參考資訊,具體還未研究

5.作為phper,嘗試過使用php的函式memory_get_usage(), 該函式也不能得到php當前執行的程式,實際的,真正占用的記憶體數量。

如果真想得到,php真正占用的記憶體, 大概只能在, 程式執行的開始,執行一次memory_get_usage().

在程式執行結束,執行一次memory_get_usage()。 將兩者的值相減,得到的值, 應該是乙個相對比較準確的,記憶體占用數量了。

這個方法還沒有測試, 考慮到, 得到這個數量,也沒有實際意義, 加上平時又比較忙,懶得試了。

也許php還有乙個方法, 是使用shm_* 系列函式, 這也我也未深入研究,詳見這篇文章(

(1)乙個c程式設計師, 眼中的linux記憶體使用詳解,寫的比較詳細,比較細緻,也比較專業。

(2)對 /proc/pid/statm的詳細說明

(3)簡單解讀linux的/proc下的statm、maps、memmap 記憶體資訊檔案分析

(4)php 共享記憶體的使用

(5)memory usage with smaps

(6)capturing process memory usage under linux

,這篇文章似乎是對乙個產品的廣告,但裡面對uss,pss,rss 這幾個概念有詳細的解釋

(7) 

(8) 

linux check memory usage,文章對 free, vmstat,top , 

gnome-system-monitor等命令有一些介紹

(9)

console monitoring tools for suse linux

,對top,free,uptime,pmap,smartctl,iostat,strace等命令有所介紹,並且介紹的比較詳細,目前只是粗略的看了一下,有時間還要再看看。 

(10)

solaris 9 enhanced pmap,比較詳細的介紹了pmap的應用,不過是基於solaris 9的

linux下檢視哪個程序占用記憶體多

1.用top命令 1 top top命令是linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似於windows的任務管理器 可以直接使用top命令後,檢視 mem的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令...

linux下檢視哪個程序占用記憶體多

1.用top命令 1 top top命令是linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似於windows的任務管理器 可以直接使用top命令後,檢視 mem的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令...

linux 程序檢視

一,top命令 顯示了當前正執行的程序以及關於它們的重要資訊,包括它們的記憶體和 cpu 用量。該列表既是真實時間的也是互動的。命令描述 q 退出 space 立即重新整理顯示 h 顯示幫助螢幕 k 殺死某程序。你會被提示輸入程序 id 以及要傳送給它的訊號。n 改變要顯示的程序數量。你會被提示輸入...