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