Linux下找出吃內(nèi)存的方法總結(jié)
Linux下查詢進(jìn)程占用的內(nèi)存方法總結(jié),假設(shè)現(xiàn)在有一個(gè)「php-cgi」的進(jìn)程 ,進(jìn)程id為「25282」?,F(xiàn)在想要查詢?cè)撨M(jìn)程占用的內(nèi)存大小。linux命令行下有很多的工具進(jìn)行查看,現(xiàn)總結(jié)常見(jiàn)的幾種方式。
通過(guò)進(jìn)程的 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 表示占用的物理內(nèi)存
通過(guò) 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
 
關(guān)鍵信息點(diǎn)
1、進(jìn)程ID
2、啟動(dòng)命令「/usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/php-fpm.conf」
3、RSS :占用的物理內(nèi)存 113612KB
通過(guò) smaps
- [root@web3_u ~]# cat /proc/25282/smaps | grep '^Rss:' \
 - | awk '{sum +=$2} END{print sum}'
 - 113612
 
求和得到實(shí)際占用物理內(nèi)存為 113612
通過(guò) 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 過(guò)濾 25282 進(jìn)程號(hào),得到第5列「rsz」的內(nèi)存大小為「113612」
輸出php-cgi進(jìn)程占用的物理內(nèi)存,并從高到低進(jìn)行排序
- [root@web3_u ~]# ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' \
 - | grep php-cgi | sort -k5nr
 
輸出結(jié)果
- 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為實(shí)際內(nèi)存,上例實(shí)現(xiàn)按內(nèi)存排序,由大到小
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
 - 虛擬內(nèi)存 428M
 - 物理內(nèi)存 110M 110*1024= 112640 「和前面計(jì)算出來(lái)的值基本一致」
 - 共享內(nèi)存 93M
 - 進(jìn)程使用的物理內(nèi)存和總內(nèi)存的百分比 1.9 %
 
- PID:進(jìn)程的ID
 - USER:進(jìn)程所有者
 - PR:進(jìn)程的優(yōu)先級(jí)別,越小越優(yōu)先被執(zhí)行
 - NInice:值
 - VIRT:進(jìn)程占用的虛擬內(nèi)存
 - RES:進(jìn)程占用的物理內(nèi)存
 - SHR:進(jìn)程使用的共享內(nèi)存
 - S:進(jìn)程的狀態(tài)。S表示休眠,R表示正在運(yùn)行,Z表示僵死狀態(tài),N表示該進(jìn)程優(yōu)先值為負(fù)數(shù)
 - %CPU:進(jìn)程占用CPU的使用率
 - %MEM:進(jìn)程使用的物理內(nèi)存和總內(nèi)存的百分比
 - TIME+:該進(jìn)程啟動(dòng)后占用的總的CPU時(shí)間,即占用CPU使用時(shí)間的累加值。
 - COMMAND:進(jìn)程啟動(dòng)命令名稱
 
按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排序,默認(rèn)也是按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 。 表示按占用內(nèi)存排序。 第一列 redis服務(wù)器占用了8.6G的內(nèi)存 。 這個(gè)內(nèi)存和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占用的內(nèi)存在60M左右
按進(jìn)程消耗內(nèi)存多少排序的方法
通過(guò) 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
 
輸出結(jié)果
- [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
 
參數(shù)解析:
- -e 顯示所有進(jìn)程
 - -o 定制顯示信息
 - pid 進(jìn)程ID
 - comm 進(jìn)程名
 - args 啟動(dòng)命令
 - pcpu 占用CPU 百分比
 - rsz 占用物理內(nèi)存大小
 - vsz 占用虛擬內(nèi)存大小
 - stime 進(jìn)程啟動(dòng)時(shí)間
 - user 啟動(dòng)用戶
 
以第一行為例
- 進(jìn)程ID 23946
 - 進(jìn)程名 php-cgi
 - 啟動(dòng)命令 /usr/local/php/bin/php-cgi
 - 占用CPU 0
 - 占用物理內(nèi)存 129540
 - 占用虛擬內(nèi)存 440000
 - 啟動(dòng)時(shí)間 Oct06
 - 啟動(dòng)用戶 nobody
 
通過(guò) top 命令
top命令默認(rèn)是以CPU排序輸出的,按字母「M」,可以按內(nèi)存占用大小進(jìn)行排序顯示
- 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
 
輸出參數(shù)介紹
- PID:進(jìn)程的ID
 - USER:進(jìn)程所有者
 - VIRT:進(jìn)程占用的虛擬內(nèi)存
 - RES:進(jìn)程占用的物理內(nèi)存
 - SHR:進(jìn)程使用的共享內(nèi)存
 - S:進(jìn)程的狀態(tài)。S表示休眠,R表示正在運(yùn)行,Z表示僵死狀態(tài),N表示該進(jìn)程優(yōu)先值為負(fù)數(shù)
 - %CPU:進(jìn)程占用CPU的使用率
 - %MEM:進(jìn)程使用的物理內(nèi)存和總內(nèi)存的百分比
 - TIME+:該進(jìn)程啟動(dòng)后占用的總的CPU時(shí)間,即占用CPU使用時(shí)間的累加值。
 
通過(guò)比較進(jìn)程ID 「23946」,top 命令和 ps 命令輸出的結(jié)果基本保持一致。
















 
 
 






 
 
 
 