Linux下檢視某一個程式執行所佔用的記憶體【轉】
第一種方式
top -p 程序號
[[email protected] micro-service]$ top -p 20490 top - 16:50:32 up 6 days, 2:18, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 65876972 total, 51899292 free, 9988408 used, 3989272 buff/cache KiB Swap: 32964604 total, 32964604 free, 0 used. 55522228 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20490 yzy 20 0 113252 1632 1272 S 0.0 0.0 0:35.50 sh
第二種方式
ps -aux | grep 程序名
[[email protected] micro-service]$ ps -aux | grep eureka-auto.sh zhoulu 3716 0.0 0.0 112640 972 pts/0 S+ 16:49 0:00 grep --color=auto eureka-auto.sh zhoulu 20490 0.0 0.0 113252 1632 ? S Apr14 0:35 /bin/sh ./eureka-auto.sh
第三種方式
cat /proc/程序號/status
[[email protected] micro-service]$ cat /proc/20490/status Name: sh State: S (sleeping) Tgid: 20490 Ngid: 0 Pid: 20490 PPid: 1 TracerPid: 0 Uid: 1019 1019 1019 1019 Gid: 1019 1019 1019 1019 FDSize: 256 Groups: 1019 VmPeak: 113256 kB VmSize: 113252 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 1632 kB VmRSS: 1632 kB VmData: 340 kB VmStk: 136 kB VmExe: 884 kB VmLib: 2044 kB VmPTE: 52 kB VmSwap: 0 kB Threads: 1 SigQ: 0/257254 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000000005 SigCgt: 0000000000010002 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000001fffffffff Seccomp: 0 Cpus_allowed: ffff Cpus_allowed_list: 0-15 Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 102189 nonvoluntary_ctxt_switches: 170
VmSize(KB) 任務虛擬地址空間的大小 (total_vm-reserved_vm),其中total_vm為程序的地址空間的大小,reserved_vm:程序在預留或特殊的記憶體間的物理頁 VmLck(KB) 任務已經鎖住的實體記憶體的大小。鎖住的實體記憶體不能交換到硬碟 (locked_vm) VmRSS(KB) 應用程式正在使用的實體記憶體的大小,就是用ps命令的引數rss的值 (rss) VmData(KB) 程式資料段的大小(所佔虛擬記憶體的大小),存放初始化了的資料; (total_vm-shared_vm-stack_vm) VmStk(KB) 任務在使用者態的棧的大小 (stack_vm) VmExe(KB) 程式所擁有的可執行虛擬記憶體的大小,程式碼段,不包括任務使用的庫 (end_code-start_code) VmLib(KB) 被映像到任務的虛擬記憶體空間的庫的大小 (exec_lib) VmPTE 該程序的所有頁表的大小,單位:kb Threads 共享使用該訊號描述符的任務的個數,在POSIX多執行緒序應用程式中,執行緒組中的所有執行緒使用同一個訊號描述符
1、VmRSS是真實正在佔用的記憶體,而VmData是虛擬記憶體,大小差異大並沒有什麼問題。 2、VmData是指資料段的記憶體大小,存放初始化了的資料; (total_vm-shared_vm-stack_vm) 3、不調動態庫的時候是不計算的(dlopen方式) 4、靜態庫會編譯為程式本身的一部分,不在VmLib的統計之內。 5、參考上面的說明 6、除非有非常明顯的記憶體洩露,如記憶體一直大幅度增長並長時間不釋放,否則單純以這些值是很難來判斷真正的內在洩露。