---
author: 2daygeek
category: 技术
comments_data:
- date: '2017-06-26 17:28:13'
  message: 有点意思。
  postip: 106.38.118.212
  username: 贵在坚持 [Chrome 58.0|Windows 10]
count:
  commentnum: 1
  favtimes: 4
  likes: 0
  sharetimes: 0
  viewnum: 8818
date: '2017-06-26 16:56:00'
editorchoice: false
excerpt: ps_mem 是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。这个工具和其它的区别在于其精确显示核心内存使用情况。
fromurl: http://www.2daygeek.com/ps_mem-report-core-memory-usage-accurately-in-linux/
id: 8639
islctt: true
largepic: /images/p/201706/26/165617wobmm87558zh2obd.jpg
permalink: /article-8639-1.html
pic: /images/p/201706/26/165617wobmm87558zh2obd.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: ps_mem 是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。这个工具和其它的区别在于其精确显示核心内存使用情况。
tags:
- 监控
- 内存
- ps_mem
thumb: false
title: ps_mem：一个用于精确报告 Linux 核心内存用量的简单 Python 脚本
titlepic: true
translator: xllc
updated: '2017-06-26 16:56:00'
---

![](/images/p/201706/26/165617wobmm87558zh2obd.jpg)


[ps\_mem](https://github.com/pixelb/ps_mem) 是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单 python 脚本。虽然在 Linux 上有很多可用于查看内存使用情况的工具，比如 `free`、`vmstat`、`smem`、`top` 等，但这个工具和其它的区别在于其精确显示核心内存使用情况。


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


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


另外，推荐阅读以下内存工具：


* [free – 一个在 Linux 上查看内存用量统计（可用和已用）的标准工具](http://www.2daygeek.com/free-command-to-check-memory-usage-statistics-in-linux/)
* [smem – Linux 内存报告/统计工具](http://www.2daygeek.com/smem-linux-memory-usage-statistics-reporting-tool/)
* [vmstat – 一个好用的用于虚拟内存统计的标准工具](http://www.2daygeek.com/linux-vmstat-command-examples-tool-report-virtual-memory-statistics/)


### 通过包管理器安装 ps\_mem


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


对于 RHEL/CentOS ，使用 [yum 包管理器](http://www.2daygeek.com/yum-command-examples/) 安装 `ps_mem` 包：



```
$ sudo yum install ps_mem

```

对于Fedora ，使用 [dnf 包管理器](http://www.2daygeek.com/dnf-command-examples/) 安装 ps\_mem 包：



```
$ sudo dnf install ps_mem

```

对于 Arch Linux ，使用 [pacman 包管理器](http://www.2daygeek.com/pacman-command-examples/) 安装 ps\_mem 包：



```
$ sudo pacman -S ps_mem

```

### 通过 pip 安装 ps\_mem


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


对于基于 Debian 的系统：



```
$ sudo apt-get install python-pip

```

对于基于 RHEL/CentOS 的系统：



```
$ sudo yum install python-pip

```

对于 Fedora



```
$ sudo dnf install python-pip

```

对于 openSUSE



```
$ sudo zypper install python-pip

```

对于基于 Arch Linux 的系统：



```
$ sudo pacman -S python-pip

```

最后，在 Linux 上运行 `pip` 工具安装 `ps_mem` ：



```
$ sudo pip install ps_mem

```

### 直接运行 ps\_mem.py 脚本


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



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

```

### ps\_mem 使用方法


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



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

```

输出中打印出全路径：



```
$ 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 列表的内存使用情况：



```
$ 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 秒报告一次内存使用情况：



```
$ sudo ps_mem w 2

```

只显示内存总量：



```
$ sudo ps_mem -t
1329884160

```



---


via: <http://www.2daygeek.com/ps_mem-report-core-memory-usage-accurately-in-linux/>


作者：[2DAYGEEK](http://www.2daygeek.com/author/2daygeek/) 译者：[xllc](https://github.com/xllc) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出