前言
大家好,這里是浩道Linux,主要給大家分享Linux、Python、網絡通信、網絡安全等相關的IT知識平臺。
今天浩道跟大家一篇關于運維牛人如何在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
?
關鍵信息點
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
?
參數解析:
-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 命令輸出的結果基本保持一致
審核編輯:湯梓紅
?
評論
查看更多