1. ps aux 命令
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
lizhibin 32986 0.0 13.8 916276 534748 ? Ssl 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
lizhibin 32988 0.0 13.8 768812 534272 ? S 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
lizhibin 32993 0.0 13.8 764704 534752 ? S 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
lizhibin 32994 0.0 13.8 764704 534752 ? S 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
lizhibin 32995 0.0 13.8 764704 534752 ? S 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
lizhibin 32996 0.0 13.8 764704 534752 ? S 10:12 0:00 /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
VSZ:表示程式佔用多少虛擬記憶體(kb)
RSS:表示程式佔用多少實體記憶體(kb)
我們來簡化一下命令:
ps aux | grep swoole | grep -v grep | awk -F ‘ ‘ ‘{print $5,$6}’
916276 534748
768812 534272
764704 534752
764704 534752
764704 534752
764704 534752
可以看到每個 swoole 的程式佔用了月 500+MB 的實體記憶體。
2. 使用 pmap 命令
pmap -d 32988
32988: /usr/local/php_5.4.45/bin/php -c /usr/local/php_5.4.45/etc/php-swoole.ini /www/service.gamechat.37.com/server.php
Address Kbytes Mode Offset Device Mapping
0000000000400000 10272 r-x– 0000000000000000 0fd:00000 php
0000000001007000 4 r—- 0000000000a07000 0fd:00000 php
0000000001008000 60 rw— 0000000000a08000 0fd:00000 php
0000000001017000 140 rw— 0000000000000000 000:00000 [ anon ]
0000000002a69000 301936 rw— 0000000000000000 000:00000 [ anon ]
00007fcec91e4000 224380 rw— 0000000000000000 000:00000 [ anon ]
命令輸出第一行:執行程式以及引數。
Address: 記憶體開始地址
Kbytes: 佔用記憶體的位元組數(KB)
RSS: 保留記憶體的位元組數(KB)
Dirty: 髒頁的位元組數(包括共享和私有的)(KB)
Mode: 記憶體的許可權:read 、 write 、 execute 、 shared 、 private (寫時複製)
Mapping: 佔用記憶體的檔案、或 [anon](分配的記憶體)、或 [stack](堆疊)
Offset: 檔案偏移
Device: 裝置名 (major:minor)
我們使用 awk 命令,計算 Kbytes 列的和
pmap -dq 32988 | awk -F ‘ ‘ ‘BEGIN{sum=0}{sum+=$2}END{print sum}’
結果輸出:768812KB,這個結果是 ps 命令中的虛擬記憶體大小。接下來過濾掉 so 的共享記憶體。
pmap -dq 32988 | awk -F ‘ ‘ ‘BEGIN{sum=0}{if($6!~/.so/)sum+=$2}END{print sum}’
結果輸出:672284KB,和 ps 命令得出的實體記憶體資料不同。對命令進行調整:
pmap -dq 32988 | awk -F ‘ ‘ ‘BEGIN{sum=0}{if($6~/[/)sum+=$2}END{print sum}’
結果輸出:539684KB,和 ps 命令得出的實體記憶體已經比較接近了。上面的命令,主要統計出程式 [ anon ] 、 [ stack ] 所佔用的記憶體(堆疊)
原文連結:http://www.centoscn.com/CentOS/help/2017/0411/8722.html