linux進程內存空間
① linux下查看進程內存的方法
現有一個進程id為「11529」,想要查詢該進程佔用的內存大小。
方法一:cat /proc/11529/status
方法二:pmap -x 11529
方法三:top -n 1 | grep 11529 | awk '{print $5}'
方法四:ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep 11529 | awk '{print $5}'
現有一個進程name為「sensechess-app」,想要查詢該進程佔用的內存大小。
自開發的的腳本工具 - sysMonitor.zip,可監控系統或者某個進程的CPU、MEM、DISK的使用情況.
示例:
② linux怎麼查看每個進程佔用的內存
ps
aux
user
pid
%cpu
%mem
vsz
rss
tty
stat
start
time
command
●
user,進程所有者的用戶名。
●
pid,進程號,可以唯一標識該進程。
●
%cpu,進程自最近一次刷新以來所佔用的cpu時間和總時間的百分比。
●
%mem,進程使用內存的百分比。
●
vsz,進喊謹絕程使用的虛擬內存大小,以k為單位。
●
rss,進程佔用的物理內存的總數量,以k為單位。
●
tty,進程相關的終端名。
●
stat,進程狀態,用(r--運行或准備鄭姿運行;s--睡眠狀態;i--空閑;z--凍結;d--不間斷睡眠;w-進程沒有駐留頁;t停止或跟蹤晌備。)這些字母來表示。
●
start,進程開始運行時間。
●
time,進程使用的總cpu時間。
●
command,被執行的命令行。
③ 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
④ 64位的linux上單個進程可以使用的最大內存數量是多少
對於64位Linux允許多達128個TB單個進程的虛擬地址空間,並且能夠解決大約64 TB的物理存儲器,但是受處理器和系統的限制。原話:64-bit Linux allows up to 128 TB of virtual address space for indivial processes, and can address approximately 64 TB of physical memory, subject to processor and system limitations.只要你的機器有足夠的內存統統可以給你放倒。連銀河曙光都能放下你的機器肯定不在話下:)而理論值更高,一個64位的微處理器可定址存儲器16 EB(1TB=1024GB,1PB=1024TB,1EB=1024PB自己換算)。順便說一下64位的windows企業伺服器最大2TB內存。
⑤ Linux進程內存如何管理
內存管理的主要工作就是對物理內存進行組織,然後對物理內存的分配和回收。但是Linux引入了虛擬地址的概念。
虛擬地址的作用
如果用戶進程直接操作物理地址會有以下的壞處:
1、 用戶進程可以直接操作內核對應的內存,破壞內核運行。
2、 用戶進程也會破壞其他進程的運行
CPU中寄存器中存儲的是邏輯地址,需要進行映射才能轉化為對應的物理地址,然後獲取對應的內存。
通過引入邏輯地址,每個進程都擁有單獨的邏輯地址范圍。
當進程申請內存的時候,會為其分配邏輯地址和物理地址,並將邏輯地址和物理地址做一個映射。
⑥ linux 下怎麼查看一個進程佔用內存大小
這里介紹下查看一個進程佔用內存大小的方法。
1、首先單擊桌面左上角的應用程序,選擇系統工具選項,如下圖所示。
⑦ linux如何查看每個進程使用內存大小
我不知道如何查看。但記得linux(32位)中每個進程獨享4gb的進程空間,需要注意的是這4g指的是虛擬內存,而非物理內存。可以查閱一下linux虛擬內存機制相關資料。
要定製的話難度大啊!內核文件里用進程描述符(thread_info)表示一個進程,它是一個結構體,裡面有個關於進程內存分配的欄位(addr_limit)。具體自己研究研究吧!
如果只是對某個進程分配空間的話就簡單多了。假如你要為當前進程設置2m的內存上限,可以通過current->addr_limit=2048實現。
⑧ linux 怎麼查看進程 內存佔用
ps
aux
USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMAND
●
USER,進程所有者的用戶名。
●
PID,進程號,可以唯一標識該進程。
●
%CPU,進程自最近一次刷新以來所佔用的CPU時間和總時間的百分比。
●
%MEM,進程使用內存的百分比。
●
VSZ,進程使用的虛擬內存大小,以K為單位。
●
RSS,進程佔用的物理內存的總數量,以K為單位。
●
TTY,進程相關的終端名。
●
STAT,進程狀態,用(R--運行或准備運行;S--睡眠狀態;I--空閑;Z--凍結;D--不間斷睡眠;W-進程沒有駐留頁;T停止或跟蹤。)這些字母來表示。
●
START,進程開始運行時間。
●
TIME,進程使用的總CPU時間。
●
COMMAND,被執行的命令行。