當前位置:首頁 » 操作系統 » linux程序內存

linux程序內存

發布時間: 2022-05-20 19:23:55

Ⅰ 在linux下,查看一個運行中的程序,佔用了多少內存

1、linux下查看程序佔用的內存可以使用命令行
ps
aux:
其中
VSZ(或VSS)列
表示,程序佔用了多少虛擬內存。
RSS列
表示,
程序佔用了多少物理內存。
虛擬內存可以不用考慮,它並不佔用實際物理內存。
2、也可以使用圖形工具系統監視器。大多系統都會自帶。在啟動器(在ubuntu為桌面左上ubuntu標志)里找到。

Ⅱ linux下怎麼查看程序的內存使用情況

linux下怎麼查看程序的內存使用情況,解決辦法

  • 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排行

  • 2、pmap

  • 可以根據進程查看進程相關信息佔用的內存情況,(進程號可以通過ps查看)如下所示:

  • $ pmap -d 1459

  • 3、ps

  • 如下例所示:

  • $ 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為實際內存,上例實現按內存排序,由大到小

Ⅲ linux下,一個運行中的程序,究竟佔用了多少內存

1. 在linux下,查看一個運行中的程序, 佔用了多少內存, 一般的命令有
(1). ps aux:
其中 VSZ(或VSS)列 表示,程序佔用了多少虛擬內存。
RSS列 表示, 程序佔用了多少物理內存。
虛擬內存可以不用考慮,它並不佔用實際物理內存。
(2). top 命令也可以
其中 VIRT(或VSS)列 表示,程序佔用了多少虛擬內存。 同 ps aux 中的 VSZ列
RES列 表示, 程序佔用了多少物理內存。同 ps aux 中的RSS列

Ⅳ linux 下怎麼查看一個進程佔用內存大小

這里介紹下查看一個進程佔用內存大小的方法。

1、首先單擊桌面左上角的應用程序,選擇系統工具選項,如下圖所示。

Ⅳ 如何在linux中查看程序佔用的內存

用free命可以查看總的系統內存佔用和空閑情況
使用ps

top
命令可以查看某一程序內存使用情況
程序使用內存狀況是動態的.查看的只是某一時間點的內存情況

Ⅵ Linux進程內存管理方法

Linux系統提供了復雜的存儲管理系統,使得進程所能訪問的內存達到4GB。在Linux系統中,進程的4GB內存空間被分為兩個部分——用戶空間與內核空間。用戶空間的地址一般分布為0~3GB(即PAGE_OFFSET,在Ox86中它等於OxC0000000),這樣,剩下的3~4GB為內核空間,用戶進程通常只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。用戶進程只有通過系統調用(代表用戶進程在內核態執行)等方式才可以訪問到內核空間。每個進程的用戶空間都是完全獨立、互不相乾的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它並不會跟著進程改變,是固定的。內核空間的虛擬地址到物理地址映射是被所有進程共享的,內核的虛擬空間獨立於其他程序。Linux中1GB的內核地址空間又被劃分為物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域。對於x86系統而言,一般情況下,物理內存映射區最大長度為896MB,系統的物理內存被順序映射在內核空間的這個區域中。當系統物理內存大於896MB時,超過物理內存映射區的那部分內存稱為高端內存(而未超過物理內存映射區的內存通常被稱為常規內存),內核在存取高端內存時必須將它們映射到高端頁面映射區。Linux保留內核空間最頂部FIXADDR_TOP~4GB的區域作為保留區。當系統物理內存超過4GB時,必須使用CPU的擴展分頁(PAE)模式所提供的64位頁目錄項才能存取到4GB以上的物理內存,這需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以後的CPU允許內存最大可配置到64GB,它們具備36位物理地址空間定址能力。由此可見,對於32位的x86而言,在3~4GB之間的內核空間中,從低地址到高地址依次為:物理內存映射區隔離帶vmalloc虛擬內存分配器區隔離帶高端內存映射區專用頁面映射區保留區。

Ⅶ 如何手動釋放Linux內存的方法

1、首先打開Linux命令窗口,可使用快捷鍵Ctrl+Alt+T打開。

Ⅷ Linux進程內存管理

對於包含MMU的處理器而言,Linux系統提供了復雜的存儲管理系統,使得進程所能訪問的內存達到4GB。在Linux系統中,進程的4GB內存空間被分為兩個部分——用戶空間與內核空間。用戶空間的地址一般分布為0~3GB(即PAGE_OFFSET,在Ox86中它等於OxC0000000),這樣,剩下的3~4GB為內核空間,用戶進程通常只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。用戶進程只有通過系統調用(代表用戶進程在內核態執行)等方式才可以訪問到內核空間。
每個進程的用戶空間都是完全獨立、互不相乾的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它並不會跟著進程改變,是固定的。內核空間的虛擬地址到物理地址映射是被所有進程共享的,內核的虛擬空間獨立於其他程序。
Linux中1GB的內核地址空間又被劃分為物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域。
對於x86系統而言,一般情況下,物理內存映射區最大長度為896MB,系統的物理內存被順序映射在內核空間的這個區域中。當系統物理內存大於896MB時,超過物理內存映射區的那部分內存稱為高端內存(而未超過物理內存映射區的內存通常被稱為常規內存),內核在存取高端內存時必須將它們映射到高端頁面映射區。Linux保留內核空間最頂部FIXADDR_TOP~4GB的區域作為保留區。
當系統物理內存超過4GB時,必須使用CPU的擴展分頁(PAE)模式所提供的64位頁目錄項才能存取到4GB以上的物理內存,這需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以後的CPU允許內存最大可配置到64GB,它們具備36位物理地址空間定址能力。
由此可見,對於32位的x86而言,在3~4GB之間的內核空間中,從低地址到高地址依次為:物理內存映射區→隔離帶→vmalloc虛擬內存分配器區→隔離帶→高端內存映射區→專用頁面映射區→保留區。

Ⅸ linux下,一個運行中的程序,究竟佔用了多少內存

RSS列 表示, 程序佔用了多少物理內存。 虛擬內存可以不用考慮,它並不佔用實際物理內存。 (2). top 命令也可以 其中VIRT(或VSS)列 表示,程序佔用了多少虛擬內存。 同 ps aux 中的 VSZ列 RES列 表示, 程序佔用了多少物理內存。同 ps aux 中的RSS列 2.在linux下, 查看當前系統佔用了多少內存, 一般的命令是 free其中, free就是系統還有多少內存可以使用。但由於 linux 系統對內存使用有一個原則, 就是, 內存是寶貴的, 能使用多少就使用多少。 所以, linux會把已經調用過的包緩存起來,放在內存里。這樣,實際上,可以使用的內存,就可以理解為, free+buffers+cached3.當你了解完這些命令以後, 再去使用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/{val_name=gensub(/([a-zA-Z_]*).*/,"\\1",1,$1); list[val_name]+=$2; }END{for(val in list)print val,list[val];}' (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()。 將兩者的值相減,得到的值, 應該是一個相對比較准確的,內存佔用數量了。 這個方法還沒有測試, 考慮到, 得到這個數量,也沒有實際意義, 加上平時又比較忙,懶得試了。

Ⅹ Linux進程的內存使用解析

進程XXX佔用了多少內存?這是個經常被問到,也經常被答錯的問題。linux進程的內存分配是個比較復雜的話題,而linux上的工具往往把這個問題過分簡單化,因此引出不少誤解和困惑。首先把ps,
top這類工具扔掉,然後看這么一個簡單程序:[root@pczou
pczou]#
cat
./prog.c#i
nclude#i
nclude#i
nclude#i
nclude#define
ONEM
(1024*1024)
www.shiwu.com
int
func(){char
s[16*ONEM];char*
p;p
=
malloc(32*ONEM);pause();return
0;}int
main(){printf(pid:
%d/n,
getpid());func();return
0;}其中func()這個函數分配了32MB的內存,以及16MB的堆棧。運行一下這個prog程序,prog會停在pause()的位置,看看ps怎麼說:USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMANDroot
4238
0.0
0.0
52396
352
pts/0
S
21:29
0:00
./progVSZ指的是進程內存空間的大小,這里是52396KB;RSS指的是駐留物理內存中的內存大小,這里是352KB。一般系統管理員知道VSZ並不代表進程真正用到的內存,因為有些空間會僅在頁表中掛個名,也就是說只是虛擬存在著,只有真正用到的時候內核才會把虛擬頁面和真正的物理頁面映射起來。比如,prog.c中用malloc()分配的32MB內存,由於程序中並沒有用到這些內存,沒有物理內存被分配,也就不應算到進程的帳上。
www.shiwu.com
進程的內存使用情況比較復雜,這是因為:進程所申請的內存不一定真正會被用到真正用到了的內存也不一定是只有該進程自己在用
(比如動態共享庫)所以酒足飯飽結帳的時候,飯館打出的帳單中往往漏洞百出,不是計入了沒上的菜,就是一個菜算了兩份錢。而ps給出的就是這樣的糊塗帳單,不足為憑。算清楚帳的唯一辦法是把每個菜都仔細過一遍,看看有沒有上,有沒有重復。下面的帳單要清楚多了:Virtual
memory
:
52396
KBEffective
VM
:
52120
KBMapped
:
352
KBEffective
mapped:
76.6
KBSole
use
:
72
KBPer
file
memory
useld-2.3.4.so
:
VM
94208
B,
M
90112
B,
S
8192
Bprog
:
VM
8192
B,
M
8192
B,
S
8192
Blibc-2.3.4.so
:
VM
1180
KB,
M
221184
B,
S
16384
B可以看出,雖然虛擬地址空間是52396KB,實際映射(a.k.a.
分配)的空間是352KB,這和ps給出的結果一致。再看Effective
Mapped這個值,僅為76.6
KB。這個值的計算方法是:有效的實際使用內存
=
該進程獨占的內存
+
共享的內存A
/共享A的進程數目
+
共享的內存B
/共享B的進程數目
+
...比如對於一個kde應用程序kontact,它用的Qt庫的虛擬地址空間為
7M,而實際映射的空間有4.5M,也就是說真正給
Qt分配物理內存大小為4.5M。假設有10個KDE應用正在運行,那麼記到kontact帳上的就不應該是4.5M,而是A-A之後的0.45M。這么算帳雖然並不十分准確,但Effective
Mapped已經足以說明進程所佔用內存的實際大小了。
www.shiwu.com
OK,最後用這個方法給系統中所有進程都結下帳:從上面的統計結果可以看出:雖然firefox的佔用虛擬空間是最大的,但其實際佔用的內存卻比X
Server要少。firefox
的實際佔用的內存和其RSS
(a.k.a.
mapped)差別不大,佔RSS的99%;而kontact的實際佔用內存卻僅佔RSS的63%,有27%的內存是共享的。由此可以粗略看出我用的窗口管理器是KDE而非Gnome,why?
因為Qt之類的共享庫被很多KDE進程分擔了。sole值可以理解為private
mapped,也就是這個進程退出後可能被釋放的內存
(對於非匿名的映射頁面可能還會存留一段時間)。作者
railon

熱點內容
演算法製造 發布:2024-10-25 23:11:27 瀏覽:885
台式電腦安裝哪個安卓系統好 發布:2024-10-25 23:11:25 瀏覽:113
怎麼樣學電腦編程 發布:2024-10-25 23:10:13 瀏覽:523
安卓手機內存佔用太多如何清理 發布:2024-10-25 23:03:53 瀏覽:909
swift項目編譯 發布:2024-10-25 22:53:12 瀏覽:962
邁銳寶買哪個配置合算 發布:2024-10-25 22:28:59 瀏覽:993
押韻腳本生成器 發布:2024-10-25 22:26:50 瀏覽:368
找文檔上傳 發布:2024-10-25 22:22:29 瀏覽:875
hibernate使用二級緩存 發布:2024-10-25 22:14:00 瀏覽:359
手機版登陸布穀鳥伺服器地址 發布:2024-10-25 22:13:59 瀏覽:173