Linux下找出吃記憶體的方法總結
linux 下查詢程式佔用的記憶體方法總結,假設現在有一個「php-cgi」的程式 ,程式id為「25282」。現在想要查詢該程式佔用的記憶體大小。 linux命令 行下有很多的工具進行檢視,現總結常見的幾種方式 |
[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 表示佔用的實體記憶體
[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
[root@web3_u ~]# cat /proc/25282/smaps | grep '^Rss:' \ | awk '{sum +=$2} END{print sum}' 113612
求和得到實際佔用實體記憶體為 113612
[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 -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命令預設是以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 命令輸出的結果基本保持一致
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2637937/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 總結Linux下檢視記憶體使用情況的多種方法Linux記憶體
- linux記憶體管理學習總結Linux記憶體
- 如何在 Linux 中找出記憶體消耗最大的程序Linux記憶體
- Linux/Centos檢視程式佔用記憶體大小的幾種方法總結LinuxCentOS記憶體
- Linux下基於記憶體分析的Rootkit檢測方法Linux記憶體
- JVM記憶體模型總結JVM記憶體模型
- Linux記憶體不足的處理方法Linux記憶體
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- JVM記憶體管理——總結篇JVM記憶體
- 17 種檢視 Linux 實體記憶體的方法Linux記憶體
- JVM之記憶體區域總結JVM記憶體
- Java記憶體模型學習總結Java記憶體模型
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- linux下找出核心符號資訊的4種方法Linux符號
- 垃圾回收與記憶體分配——總結篇記憶體
- Android常見記憶體洩漏總結Android記憶體
- 【JVM故障問題排查心得】「記憶體診斷系列」JVM記憶體與Kubernetes中pod的記憶體、容器的記憶體不一致所引發的OOMKilled問題總結(下)JVM記憶體OOM
- Linux共享記憶體的管理Linux記憶體
- [Linux]共享記憶體Linux記憶體
- Linux 檢視記憶體使用情況的幾種方法Linux記憶體
- 深入理解Java記憶體模型(七)——總結Java記憶體模型
- 如何在 Linux 下檢測記憶體洩漏Linux記憶體
- Linux實體記憶體管理Linux記憶體
- 記憶體結構記憶體
- Linux 的記憶體分頁管理Linux記憶體
- Linux的記憶體分頁管理Linux記憶體
- android 關於記憶體優化的一些總結Android記憶體優化
- Linux共享記憶體(二)Linux記憶體
- Linux 虛擬記憶體Linux記憶體
- Oracle在Linux下對記憶體大頁HugePage的實踐OracleLinux記憶體
- Android記憶體溢位、記憶體洩漏常見案例分析及最佳實踐總結Android記憶體溢位
- MYSQL的記憶體管理方法MySql記憶體
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- 最愛吃的菜,‘最後的記憶’。