CentOS查询进程占用的内存

2022年4月25日 21点热度 0人点赞

CentOS查询进程占用的内存

方法/步骤

  1. 1

    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. 2

    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 ]所占用的内存(堆栈)

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论