​精确报告Linux内存使用情况实用脚本:ps_mem​


2019-09-06 12:45



ps_mem内存工具

ps_mem 是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。虽然在 ​​Linux​​ 上有很多可用于查看内存使用情况的工具,比如 ​​free​​、​​vmstat​​、​​smem​​、​​top​​ 等,但这个工具和其它的区别在于其精确显示核心内存使用情况。

它会分别计算一个程序私有内存总量和共享内存总量,并以更准确的方式给出了总的内存使用量。很明显的,它将帮助大家知道系统中哪个程序正在占用更多的内存。

你可以通过包管理器、​​pip​​ 、或直接运行 ​​ps_mem.py​​ 脚本等多种方式来安装 ​​ps_mem​​工具。需要注意的是:需要有 root 权限。

ps_mem安装

pip安装



 


 


 




1




pip install ps_mem



或者 rpm 和 deb 包对于大多数发行版都是可用的。 还可以直接运行​​ps_mem.py​​脚本。

直接运行 ps_mem.py 脚本



 


 


 




1


2




$ git clone https://github.com/pixelb/ps_mem.git && cd ps_mem


$ sudo python ps_mem.py



ps_mem使用方法



 


 


 




1


2




ps_mem [-h|--help] [-p PID,...] [-s|--split-args] [-t|--total] [-w N]


       [-d|--discriminate-by-pid] [-S|--swap]



输出示例



 


 


 




1


2


3


4


5


6


7


8


9


10




Private  +   Shared  =  RAM used       Program


 


34.6 MiB +   1.0 MiB =  35.7 MiB       gnome-terminal


139.8 MiB +   2.3 MiB = 142.1 MiB       firefox


291.8 MiB +   2.5 MiB = 294.3 MiB       gnome-shell


272.2 MiB +  43.9 MiB = 316.1 MiB       chrome (12)


913.9 MiB +   3.2 MiB = 917.1 MiB       thunderbird


---------------------------------


                          1.9 GiB


=================================



[-p PID,…]选项允许过滤结果。例如,要将输出限制为当前的$ USER,您可以:



 


 


 




1




sudo ps_mem -p $(pgrep -d, -u $USER)



或者总结一下每个用户的 RAM 使用总量,你可以:



 


 


 




1


2


3




for i in $(ps -e -o user= | sort | uniq); do


  printf '%-20s%10s\n' $i $(sudo ps_mem --total -p $(pgrep -d, -u $i))


done



其它使用示例

输出中打印出全路径:



 


 


 




1


2


3


4


5


6


7


8


9


10


11


12




$ sudo ps_mem -s


Private  +   Shared  =  RAM used   Program


  3.2 MiB + 951.0 KiB =   4.1 MiB   /usr/lib/evolution/evolution-addressbook-factory


  3.7 MiB + 826.5 KiB =   4.5 MiB   /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1


  3.7 MiB + 853.0 KiB =   4.6 MiB   /usr/lib/unity-settings-daemon/unity-fallback-mount-helper


. . .  . . .


131.9 MiB + 168.0 KiB = 132.1 MiB   /usr/sbin/mysqld


222.1 MiB +   9.4 MiB = 231.5 MiB   /usr/bin/compiz


286.2 MiB +  11.8 MiB = 298.1 MiB   /usr/lib/firefox/firefox


---------------------------------


                          1.3 GiB


=================================



只显示特定的 PID 列表的内存使用情况:



 


 


 




1


2


3


4


5


6


7




$ sudo ps_mem -p 2886,4386


Private  +   Shared  =  RAM used   Program


13.5 MiB +   2.9 MiB =  16.4 MiB   gnome-terminal-server


286.2 MiB +  11.8 MiB = 298.0 MiB   firefox


---------------------------------


                        314.4 MiB


=================================



每 N 秒打印进程内存。以下命令每 2 秒报告一次内存使用情况:



 


 


 




1




$ sudo ps_mem w 2