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 改變要顯示的程序數量。你會被提示輸入...