linux下查詢進程占用的內存方法總結


linux下查詢進程占用的內存方法總結

假設現在有一個「php-cgi」的進程 ,進程id為「25282」。現在想要查詢該進程占用的內存大小。linux命令行
下有很多的工具進行查看,現總結常見的幾種方式:

通過進程的 status

[root@web3_u ~]# cat /proc/25282/status Name:  php-cgi State: S (sleeping) Tgid: 25282 Pid: 25282 PPid: 27187 TracerPid: 0 Uid: 99 99 99 99 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 -'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr

第二種方法

ps -e -'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

ps 命令

通過 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使用時間的累加值。

  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM