Linux下查詢進程佔用內存的5種方式!還有誰不會?

文章來源:https://mp.weixin.qq.com/s/-kleYkSYFb39WcWR_QRrvwphp

Linux下查詢進程佔用的內存方法總結,假設如今有一個「php-cgi」的進程 ,進程id爲「25282」。如今想要查詢該進程佔用的內存大小。linux命令行下有不少的工具進行查看,現總結常見的幾種方式。linux


 

經過進程的 status

[root@web3_u ~]# cat /proc/25282/status nginx

Name: php-cgi  web

State: S (sleeping)  面試

Tgid: 25282  redis

Pid: 25282  算法

PPid: 27187  服務器

TracerPid: 0  app

Uid: 99 99 99 99  php-fpm

Gid: 99 99 99 99  

Utrace: 0  

FDSize: 256  

Groups: 99  

VmPeak: 496388 kB  

VmSize: 438284 kB  

VmLck: 0 kB  

VmHWM: 125468 kB  

VmRSS: 113612 kB  

VmData: 92588 kB  

VmStk: 100 kB  

VmExe: 6736 kB  

VmLib: 18760 kB  

VmPTE: 528 kB  

VmSwap: 0 kB  

Threads: 1  

SigQ: 0/46155  

SigPnd: 0000000000000000  

ShdPnd: 0000000000000000  

SigBlk: 0000000000000000  

SigIgn: 0000000000001000  

SigCgt: 0000000184000004  

CapInh: 0000000000000000  

CapPrm: 0000000000000000  

CapEff: 0000000000000000  

CapBnd: ffffffffffffffff  

Cpus_allowed: f  

Cpus_allowed_list: 0-3  

Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 

Mems_allowed_list: 0  

voluntary_ctxt_switches: 68245  

nonvoluntary_ctxt_switches: 15751 

VmRSS: 113612 kB 表示佔用的物理內存

經過 pmap

[root@web3_u ~]# pmap -x 25282 

25282: /usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.conf  

Address Kbytes RSS Dirty Mode Mapping  

0000000000400000 6736 2692 0 r-x-- php-cgi  

0000000000c93000 264 196 120 rw--- php-cgi 

0000000000cd5000 60 48 48 rw--- [ anon ]  

. . .  

00007fd6226bc000 4 4 4 rw--- ld-2.12.so  

00007fd6226bd000 4 4 4 rw--- [ anon ]  

00007fff84b02000 96 96 96 rw--- [ stack ]  

00007fff84bff000 4 4 0 r-x-- [ anon ]  

ffffffffff600000 4 0 0 r-x-- [ anon ]  

---------------- ------ ------ ------  

total kB 438284 113612 107960 

關鍵信息點

一、進程ID

二、啓動命令「/usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.conf」

三、RSS :佔用的物理內存 113612KB


 

經過 smaps

[root@web3_u ~]# cat /proc/25282/smaps | grep '^Rss:' \  

| awk '{sum +=$2} END{print sum}' 

113612 

求和獲得實際佔用物理內存爲 113612

經過 ps 命令

[root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' \  

| awk '$1 ~ /25282/'  

25282 php-cgi /usr/local/php/bin/php-cgi 0.0 113612 438284 Oct09 nobody 99 

awk 過濾 25282 進程號,獲得第5列「rsz」的內存大小爲「113612」

輸出php-cgi進程佔用的物理內存,並從高到低進行排序

[root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' \  

| grep php-cgi | sort -k5nr 

輸出結果

23946 php-cgi /usr/local/php/bin/php-cgi 0.0 129540 440000 Oct06 nobody 99  

24418 php-cgi /usr/local/php/bin/php-cgi 0.0 129336 437684 Oct06 nobody 99  

18973 php-cgi /usr/local/php/bin/php-cgi 0.0 129268 440176 Oct06 nobody 99  

17219 php-cgi /usr/local/php/bin/php-cgi 0.0 126588 439840 Oct06 nobody 99  

6996 php-cgi /usr/local/php/bin/php-cgi 0.0 124876 438104 Oct09 nobody 99  

23850 php-cgi /usr/local/php/bin/php-cgi 0.0 122984 440036 Oct09 nobody 99  

28310 php-cgi /usr/local/php/bin/php-cgi 0.0 122920 436456 Oct09 nobody 99 

其中rsz爲實際內存,上例實現按內存排序,由大到小。


 

TOP 命令輸出的列

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

25282 nobody 20 0 428m 110m 93m S 0.0 1.9 0:34.42 php-cgi 

輸出列信息

 PID 25282

 用戶 nobody

 虛擬內存 428M

 物理內存 110M 110*1024= 112640 「和前面計算出來的值基本一致」

 共享內存 93M

 進程使用的物理內存和總內存的百分比 1.9 % 

PID:進程的ID  

USER:進程全部者  

PR:進程的優先級別,越小越優先被執行  

NInice:值  

VIRT:進程佔用的虛擬內存  

RES:進程佔用的物理內存  

SHR:進程使用的共享內存  

S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值爲負數  

%CPU:進程佔用CPU的使用率  

%MEM:進程使用的物理內存和總內存的百分比  

TIME+:該進程啓動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。  

COMMAND:進程啓動命令名稱 

按P

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

16036 root 20 0 8902m 8.6g 480 R 100.0 36.6 0:33.15 redis-server  

12934 root 20 0 8902m 8.6g 1072 S 5.5 36.6 285:37.81 redis-server  

969 root 20 0 0 0 0 D 4.2 0.0 277:14.85 flush-252:16  

1304 root 23 3 1689m 50m 3264 S 4.2 0.2 1445:03 xs-searchd  

1294 root 20 0 14928 928 584 S 3.5 0.0 635:05.31 xs-indexd  

1287 nobody 20 0 12884 772 576 S 2.8 0.0 833:11.42 dnsmasq  

1302 root 23 3 1113m 39m 3244 S 0.7 0.2 1437:57 xs-searchd 

4444 www 20 0 280m 43m 884 S 0.7 0.2 27:43.92 nginx  

1 root 20 0 19232 1160 868 S 0.0 0.0 0:06.75 init 

按 P .表示按cpu排序,默認也是按cpu排序

按M

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

12934 root 20 0 8902m 8.6g 1072 S 6.0 36.6 285:39.77 redis-server  

16036 root 20 0 8902m 8.6g 480 R 100.0 36.6 1:11.42 redis-server  

1236 www 20 0 1053m 209m 6556 S 0.0 0.9 4:40.70 php-cgi  

1231 www 20 0 1034m 146m 6536 S 0.0 0.6 4:20.82 php-cgi  

1184 www 20 0 1043m 119m 6584 S 0.0 0.5 4:21.85 php-cgi 

按M 。 表示按佔用內存排序。 第一列 redis服務器佔用了8.6G的內存 。 這個內存和redis info

[root@img1_u ~]# redis-cli info memory  

# Memory  

used_memory_human:8.32G 

基本相同。

[root@img1_u ~]# top -u www  

top - 22:09:01 up 67 days, 14:16, 1 user, load average: 0.61, 0.90, 0.98  

Tasks: 283 total, 2 running, 281 sleeping, 0 stopped, 0 zombie  

Cpu(s): 3.9%us, 1.0%sy, 0.5%ni, 89.7%id, 4.6%wa, 0.0%hi, 0.3%si, 0.0%st  

Mem: 24542176k total, 21130060k used, 3412116k free, 1750652k buffers  

Swap: 524280k total, 0k used, 524280k free, 4039732k cached  

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

681 www 20 0 855m 25m 5796 S 0.0 0.1 0:47.00 php-cgi  

1181 www 20 0 887m 57m 6484 S 0.0 0.2 4:41.66 php-cgi  

1183 www 20 0 864m 34m 6320 S 0.0 0.1 3:52.39 php-cgi  

1184 www 20 0 1043m 119m 6584 S 0.0 0.5 4:21.85 php-cgi  

1185 www 20 0 869m 39m 6376 S 0.0 0.2 3:57.84 php-cgi  

1186 www 20 0 886m 56m 6244 S 0.0 0.2 3:44.75 php-cgi  

1187 www 20 0 926m 66m 6480 S 0.0 0.3 4:16.12 php-cgi  

1188 www 20 0 890m 60m 6288 S 0.0 0.3 4:13.35 php-cgi  

1189 www 20 0 892m 62m 6408 S 0.0 0.3 4:06.60 php-cgi 

-u 指定用戶。 php-cgi佔用的內存在60M左右

 


 

按進程消耗內存多少排序的方法

經過 ps 命令

第一種方法

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr 

第二種方法

ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz 

輸出結果

[root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user' | sort -k5nr  

23946 php-cgi /usr/local/php/bin/php-cgi 0.0 129540 440000 Oct06 nobody  

24418 php-cgi /usr/local/php/bin/php-cgi 0.0 129336 437684 Oct06 nobody  

18973 php-cgi /usr/local/php/bin/php-cgi 0.0 129268 440176 Oct06 nobody  

17219 php-cgi /usr/local/php/bin/php-cgi 0.0 126588 439840 Oct06 nobody  

6996 php-cgi /usr/local/php/bin/php-cgi 0.0 125056 438104 Oct09 nobody  

23850 php-cgi /usr/local/php/bin/php-cgi 0.0 122984 440036 Oct09 nobody 

參數解析:

 -e 顯示全部進程

 -o 定製顯示信息

 pid 進程ID

 comm 進程名

 args 啓動命令

 pcpu 佔用CPU 百分比

 rsz 佔用物理內存大小

 vsz 佔用虛擬內存大小

 stime 進程啓動時間

 user 啓動用戶

以第一行爲例

進程ID 23946  

進程名 php-cgi  

啓動命令 /usr/local/php/bin/php-cgi  

佔用CPU 0  

佔用物理內存 129540  

佔用虛擬內存 440000  

啓動時間 Oct06  

啓動用戶 nobody 

經過 top 命令

top命令默認是以CPU排序輸出的,按字母「M」,能夠按內存佔用大小進行排序顯示

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  

23946 nobody 20 0 429m 126m 107m S 0.0 2.2 1:15.01 php-cgi  

24418 nobody 20 0 427m 126m 109m S 0.0 2.2 1:19.56 php-cgi  

18973 nobody 20 0 429m 126m 107m S 0.0 2.2 1:20.18 php-cgi  

17219 nobody 20 0 429m 123m 104m S 0.0 2.1 1:23.60 php-cgi  

6996 nobody 20 0 427m 122m 105m S 0.0 2.1 1:05.27 php-cgi  

23850 nobody 20 0 429m 120m 101m S 0.0 2.1 1:02.43 php-cgi 

輸出參數介紹

 PID:進程的ID

 USER:進程全部者

 VIRT:進程佔用的虛擬內存

 RES:進程佔用的物理內存

 SHR:進程使用的共享內存

 S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值爲負數

 %CPU:進程佔用CPU的使用率

 %MEM:進程使用的物理內存和總內存的百分比

 TIME+:該進程啓動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。

經過比較進程ID 「23946」,top 命令和 ps 命令輸出的結果基本保持一致。


 

最後

特別推薦一個分享C/C++和算法的優質內容,學習交流,技術探討,面試指導,簡歷修改...還有超多源碼素材等學習資料,零基礎的視頻等着你!

還沒關注的小夥伴,能夠長按關注一下:

相關文章
相關標籤/搜索