ps_mem:一个用于精确报告Linux核心内存用量的简单Python脚本

简介:

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

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

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

另外,推荐阅读以下内存工具:

通过包管理器安装 ps_mem

基于 RHEL 的系统默认仓库就包含 ps_mem 工具,所以我们可以简单地通过包管理器进行安装。

对于 RHEL/CentOS ,使用 yum 包管理器 安装 ps_mem 包:

 
 
  1. $ sudo yum install ps_mem 

对于Fedora ,使用 dnf 包管理器 安装 ps_mem 包:

 
 
  1. $ sudo dnf install ps_mem 

对于 Arch Linux ,使用 pacman 包管理器 安装 ps_mem 包:

 
 
  1. $ sudo pacman -S ps_mem 

通过 pip 安装 ps_mem

pip 是在 Linux 上推荐使用的一种安装 Python 包的工具。可以使用 pip 命令而不是包管理器去获取最新的版本。使用 pip 包前,请确保你的系统上已安装过 pip 包。否则,先使用发行版本的包管理器安装 python-pip 包。

对于基于 Debian 的系统:

 
 
  1. $ sudo apt-get install python-pip 

对于基于 RHEL/CentOS 的系统:

 
 
  1. $ sudo yum install python-pip 

对于 Fedora

 
 
  1. $ sudo dnf install python-pip 

对于 openSUSE

 
 
  1. $ sudo zypper install python-pip 

对于基于 Arch Linux 的系统:

 
 
  1. $ sudo pacman -S python-pip 

最后,在 Linux 上运行 pip 工具安装 ps_mem :

 
 
  1. $ sudo pip install ps_mem 

直接运行 ps_mem.py 脚本

我们也可以从开发者 github 页面下载文件,并直接运行 ps_mem.py 脚本。

 
 
  1. $ git clone https://github.com/pixelb/ps_mem.git && cd ps_mem 
  2. $ sudo python ps_mem.py 

ps_mem 使用方法

不带任何参数直接运行 ps_mem 以精确获取每个程序的的核心内存使用情况。

 
 
  1. $ sudo ps_mem 
  2.  Private  +   Shared  =  RAM used   Program 
  3.   1.6 MiB + 438.5 KiB =   2.1 MiB   packagekitd 
  4.   1.7 MiB + 498.0 KiB =   2.1 MiB   indicator-application-service 
  5. 912.0 KiB +   1.3 MiB =   2.2 MiB   window-stack-bridge 
  6.   2.0 MiB + 350.5 KiB =   2.3 MiB   gnome-keyring-daemon 
  7.   1.8 MiB + 575.0 KiB =   2.3 MiB   whoopsie 
  8.   2.4 MiB + 304.5 KiB =   2.7 MiB   systemd-journald 
  9.   2.7 MiB + 157.5 KiB =   2.8 MiB   ibus-engine-simple 
  10.   2.7 MiB + 182.0 KiB =   2.9 MiB   ibus-dconf 
  11.   2.7 MiB + 332.5 KiB =   3.0 MiB   NetworkManager 
  12.   3.1 MiB + 169.5 KiB =   3.2 MiB   polkitd 
  13.   1.9 MiB +   1.7 MiB =   3.6 MiB   systemd (2) 
  14.   3.4 MiB + 172.5 KiB =   3.6 MiB   deja-dup-monitor 
  15.   2.9 MiB + 685.0 KiB =   3.6 MiB   zeitgeist-datahub 
  16.   2.9 MiB + 848.0 KiB =   3.7 MiB   python2.7 
  17. . . . . . . 
  18. 222.1 MiB +   9.4 MiB = 231.5 MiB   compiz 
  19. 286.2 MiB +  11.8 MiB = 298.0 MiB   firefox 
  20. --------------------------------- 
  21.                           1.3 GiB 
  22. ================================= 

输出中打印出全路径:

 
 
  1. $ sudo ps_mem -s 
  2.  Private  +   Shared  =  RAM used   Program 
  3.   3.2 MiB + 951.0 KiB =   4.1 MiB   /usr/lib/evolution/evolution-addressbook-factory 
  4.   3.7 MiB + 826.5 KiB =   4.5 MiB   /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 
  5.   3.7 MiB + 853.0 KiB =   4.6 MiB   /usr/lib/unity-settings-daemon/unity-fallback-mount-helper 
  6. . . .  . . . 
  7. 131.9 MiB + 168.0 KiB = 132.1 MiB   /usr/sbin/mysqld 
  8. 222.1 MiB +   9.4 MiB = 231.5 MiB   /usr/bin/compiz 
  9. 286.2 MiB +  11.8 MiB = 298.1 MiB   /usr/lib/firefox/firefox 
  10. --------------------------------- 
  11.                           1.3 GiB 
  12. ================================= 

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

 
 
  1. $ sudo ps_mem -p 2886,4386 
  2.  Private  +   Shared  =  RAM used   Program 
  3.  13.5 MiB +   2.9 MiB =  16.4 MiB   gnome-terminal-server 
  4. 286.2 MiB +  11.8 MiB = 298.0 MiB   firefox 
  5. --------------------------------- 
  6.                         314.4 MiB 
  7. ================================= 

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

 
 
  1. $ sudo ps_mem w 2 

只显示内存总量:

 
 
  1. $ sudo ps_mem -t1329884160  



作者:2daygeek
来源:51CTO
目录
相关文章
|
3天前
|
消息中间件 算法 Linux
【Linux】详解如何利用共享内存实现进程间通信
【Linux】详解如何利用共享内存实现进程间通信
|
1天前
|
监控 算法 Java
Python内存管理与垃圾回收机制
【5月更文挑战第12天】了解Python内存管理与垃圾回收对编写高效稳定程序至关重要。Python自动管理内存,使用`malloc()`和`free()`分配和释放。引用计数跟踪对象引用,当引用计数为零时对象销毁。垃圾回收处理循环引用,采用分代回收算法。优化技巧包括避免循环引用、显式释放对象、使用生成器和迭代器。理解这些机制有助于避免内存泄漏,提高性能。通过示例代码,学习如何在实践中应用内存管理最佳实践和高级优化技巧,以及如何调试和诊断内存问题。在并发和异步编程中,需注意线程安全和异步内存管理。掌握这些知识能提升Python编程的效率和质量。
9 3
|
2天前
|
Python Perl
LabVIEW调用Perl和Python脚本
LabVIEW调用Perl和Python脚本
|
2天前
|
Java Linux Arthas
linux上如何排查JVM内存过高?
linux上如何排查JVM内存过高?
15 0
|
2天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
4天前
|
缓存 人工智能 算法
编写高效的Python脚本:性能优化的策略与技巧
编写高效的Python脚本需要综合考虑多个方面,包括代码结构、数据结构和算法选择等。本文将探讨在Python编程中提高脚本性能的方法,包括优化数据结构、选择合适的算法、使用Python内置函数以及通过并行和异步编程提升效率。这些技巧旨在帮助开发者在不同应用场景中编写出高性能的Python代码。
|
5天前
|
存储 关系型数据库 数据库
python中内存错误(MemoryError)
【5月更文挑战第3天】
12 1
|
5天前
|
消息中间件 存储 Unix
【探索Linux】P.15(进程间通信 —— system V共享内存)
【探索Linux】P.15(进程间通信 —— system V共享内存)
16 0
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
24 5