查看進程佔用系統資源的方法

轉自:http://blog.csdn.net/tigerscorpio/article/details/5960705
用ps命令查看進程的內存
ps命令是Linux下常見的查看進程狀況的程序,它有幾個字段可以用來查看 進程內存使用情況:sz,rss,vsz。分別說明如下:

sz:進程映像所佔用的物理頁面數量,也就是以物理頁面爲單位表示的虛擬內存大小;
rss:進程當前所佔用的物理內存大小,單位爲kB;
vsz:進程的虛擬內存大小,單位爲kB,它等於sz乘於物理頁面大小(x86平臺通常爲4kB)。

假如我要查看程序a.out的內存使用情況,操作如下:

$ ./a.out &
[1] 10069 
$ ps -O sz,rsz,vsz

PID SZ RSS VSZ S TTY TIME COMMAND
6793 1545 3648 6180 S pts/2 00:00:00 /bin/bash
10069 404 304 1616 S pts/2 00:00:00 ./a.out
10070 626 876 2504 R pts/2 00:00:00 ps -O sz,rss,vsz

上面ps命令的輸出的第3行就是./a.out自行後的相關情況。我們可以看出,它的虛擬 內存大小爲1616kB,當前佔用的物理內存爲304kB(其它數據在磁盤上或交換分區),虛 擬內存佔用404個物理頁面。由於我的機器的物理頁面大小爲4kB,可以驗證404 x 4kB等於1616kB。

用/proc文件系統查看進程的內存使用情況
ps命令的輸出關於內存的情況不是很詳細,尤其是進程所使用的內存中 有很大一部分是共享庫函數使用的,因此通過ps命令的輸出看不到進程自己使用了多 少內存。爲了查看更詳細的信息,可以藉助於/proc文件系統。這個文件系 統並存在於磁盤上,但是可以象操作其它普通文件一樣操作它。它是Linux提供給用戶 查看進程相關信息的接口。在/proc下有2個文件和進程內存有 關:/proc//status和/proc//smaps。

通過/proc//status可以查看進程的內存使用情況,包括虛擬內 存大小(VmSize),物理內存大小(VmRSS),數據段大小(VmData),棧的大小 (VmStk),代碼段的大小(VmExe),共享庫的代碼段大小(VmLib)等等。

$ cat /proc/10069/status
Name: a.out
State: S (sleeping)
Tgid: 10069
Pid: 10069
PPid: 6793
TracerPid: 0
Uid: 1001 1001 1001 1001
Gid: 1001 1001 1001 1001
FDSize: 256
Groups: 1000 1001
VmPeak: 1692 kB
VmSize: 1616 kB
VmLck: 0 kB
VmHWM: 304 kB
VmRSS: 304 kB
VmData: 28 kB
VmStk: 88 kB
VmExe: 4 kB
VmLib: 1464 kB
VmPTE: 20 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 1
nonvoluntary_ctxt_switches: 1

注意,VmData,VmStk,VmExe和VmLib之和並不等於VmSize。這是因爲共享庫函數的數 據段沒有計算進去(VmData僅包含a.out程序的數據段,不包括共享庫函數的數據段, 也不包括通過mmap映射的區域。VmLib僅包括共享庫的代碼段,不包括共享庫的數據 段)。

通過/proc//smaps可以查看進程整個虛擬地址空間的映射情況,它的輸出從低地址到高地址按順序輸出每一個映射區域的相關信息,如下所示:

$ cat /proc/10069/smaps
00110000-00263000 r-xp 00000000 08:07 128311 /lib/tls/i686/cmov/libc-2.11.1.so
Size: 1356 kB
Rss: 148 kB
Pss: 8 kB
Shared_Clean: 148 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 148 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
……
……
bfd7f000-bfd94000 rw-p 00000000 00:00 0 [stack]
Size: 88 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
注意:rwxp中,p表示私有映射(採用Copy-On-Write技術)。 Size字段就是該區域的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章