Linux下查詢進程占用內存的方法都有哪些?
今天小編要跟大家分享的文章是關于Linux下查詢進程占用內存的方法都有哪些?假設現在有一個「php-cgi」的進程 ,進程id為「25282」。現在想要查詢該進程占用的內存大小。Linux命令行下有很多的工具進行查看,下面就來和小編一起來看一看常見的方法都有哪些。對于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
關鍵信息點
1、進程ID
2、啟動命令「/usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.conf」
3、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
輸出列信息
1. PID 25282
2. 用戶 nobody
3. 虛擬內存 428M
4. 物理內存 110M 110*1024= 112640 「和前面計算出來的值基本一致」
5. 共享內存 93M
6. 進程使用的物理內存和總內存的百分比 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
參數解析:
1. -e 顯示所有進程
2. -o 定制顯示信息
3. pid 進程ID
4. comm 進程名
5. args 啟動命令
6. pcpu 占用CPU 百分比
7. rsz 占用物理內存大小
8. vsz 占用虛擬內存大小
9. stime 進程啟動時間
10. 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
輸出參數介紹
1. PID:進程的ID
2. USER:進程所有者
3. VIRT:進程占用的虛擬內存
4. RES:進程占用的物理內存
5. SHR:進程使用的共享內存
6. S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數
7. %CPU:進程占用CPU的使用率
8. %MEM:進程使用的物理內存和總內存的百分比
9. TIME+:該進程啟動后占用的總的CPU時間,即占用CPU使用時間的累加值。
通過比較進程ID 「23946」,top 命令和 ps 命令輸出的結果基本保持一致
以上就是小編今天為大家分享的關于Linux下查詢進程占用內存的方法都有哪些?的文章希望本篇文章能夠對正在從事Linux相關工作的小伙伴們有所幫助。想要了解更多Linux相關知識的小伙伴記得關注馬哥教育i官網。最后祝愿小伙伴們工作順利哦!
【免責聲明:本文圖片及文字信息均由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除。】