ps命令--查看進程內存

用ps命令查看進程的內存

ps命令是Linux下常見的查看進程狀況的程序,它有幾個字段可以用來查看進程內存使用情況:sz,rss,vsz。分別說明如下:

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

 

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

$ ./a.out &[1] 10069 $ ps -O sz,rsz,vszPID    SZ   RSS    VSZ S TTY          TIME COMMAND 6793  1545  3648   6180 S pts/2    00:00:00 /bin/bash10069   404   304   1616 S pts/2    00:00:00 ./a.out10070   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/<pid>/status/proc/<pid>/smaps

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

$ cat /proc/10069/statusName:   a.outState:  S (sleeping)Tgid:   10069Pid:    10069PPid:   6793TracerPid:      0Uid:    1001    1001    1001    1001Gid:    1001    1001    1001    1001FDSize: 256Groups: 1000 1001 VmPeak:     1692 kBVmSize:     1616 kBVmLck:         0 kBVmHWM:       304 kBVmRSS:       304 kBVmData:       28 kBVmStk:        88 kBVmExe:         4 kBVmLib:      1464 kBVmPTE:        20 kBThreads:        1SigQ:   0/16382SigPnd: 0000000000000000ShdPnd: 0000000000000000SigBlk: 0000000000000000SigIgn: 0000000000000000SigCgt: 0000000000000000CapInh: 0000000000000000CapPrm: 0000000000000000CapEff: 0000000000000000CapBnd: ffffffffffffffffCpus_allowed:   fCpus_allowed_list:      0-3Mems_allowed:   1Mems_allowed_list:      0voluntary_ctxt_switches:        1nonvoluntary_ctxt_switches:     1

 

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

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

$ cat /proc/10069/smaps00110000-00263000 r-xp 00000000 08:07 128311     /lib/tls/i686/cmov/libc-2.11.1.soSize:               1356 kBRss:                 148 kBPss:                   8 kBShared_Clean:        148 kBShared_Dirty:          0 kBPrivate_Clean:         0 kBPrivate_Dirty:         0 kBReferenced:          148 kBSwap:                  0 kBKernelPageSize:        4 kBMMUPageSize:           4 kB............bfd7f000-bfd94000 rw-p 00000000 00:00 0          [stack]Size:                 88 kBRss:                   8 kBPss:                   8 kBShared_Clean:          0 kBShared_Dirty:          0 kBPrivate_Clean:         0 kBPrivate_Dirty:         8 kBReferenced:            8 kBSwap:                  0 kBKernelPageSize:        4 kBMMUPageSize:           4 kB

注意:rwxp中,p表示私有映射(採用Copy-On-Write技術)。 Size字段就是該區域的大小。

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