檢視LINUX程序記憶體占用情況

2021-08-08 12:51:26 字數 2813 閱讀 1464

可以直接使用top命令後,檢視%mem的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令:

(1)top

top命令是linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源占用狀況,類似於windows的任務管理器

可以直接使用top命令後,檢視%mem的內容。可以選擇按程序檢視或者按使用者檢視,如想檢視oracle使用者的程序記憶體使用情況的話可以使用如下的命令:

$ top -u oracle

內容解釋:

pid:程序的id

user:程序所有者

pr:程序的優先級別,越小越優先被執行

ninice:值

virt:程序占用的虛擬記憶體

res:程序占用的物理記憶體

shr:程序使用的共享記憶體

s:程序的狀態。s表示休眠,r表示正在執行,z表示僵死狀態,n表示該程序優先值為負數

%cpu:程序占用cpu的使用率

%mem:程序使用的物理記憶體和總記憶體的百分比

time+:該程序啟動後占用的總的cpu時間,即占用cpu使用時間的累加值。

command:程序啟動命令名稱

常用的命令:

p:按%cpu使用率排行

t:按mite+排行

m:按%mem排行

可以根據程序檢視程序相關資訊占用的記憶體情況,(程序號可以通過ps檢視)如下所示:

$ pmap -d 14596

如下例所示:

$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  其中rsz是是實際記憶體

$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle |  sort -nrk5

其中rsz為實際記憶體,上例實現按記憶體排序,由大到小

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:髒頁數量

持續學習、持續收穫才能帶來持續的滿足和快樂!

檢視LINUX程序記憶體占用情況

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

檢視LINUX程序記憶體占用情況

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

檢視LINUX程序記憶體占用情況

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