标签 top 下的文章

在类 Unix 系统中监视运行进程时,最常用的程序是 top 和它的增强版 htop。我个人最喜欢的是 htop。但是,开发人员不时会发布这些程序的替代品。top 和 htop 工具的一个替代品是 Hegemon。它是使用 Rust 语言编写的模块化系统监视程序。

关于 Hegemon 的功能,我们可以列出以下这些:

  • Hegemon 会监控 CPU、内存和交换页的使用情况。
  • 它监控系统的温度和风扇速度。
  • 更新间隔时间可以调整。默认值为 3 秒。
  • 我们可以通过扩展数据流来展示更详细的图表和其他信息。
  • 单元测试。
  • 干净的界面。
  • 自由开源。

安装 Hegemon

确保已安装 Rust 1.26 或更高版本。要在 Linux 发行版中安装 Rust,请参阅以下指南:

另外要安装 libsensors 库。它在大多数 Linux 发行版的默认仓库中都有。例如,你可以使用以下命令将其安装在基于 RPM 的系统(如 Fedora)中:

$ sudo dnf install lm_sensors-devel

在像 Ubuntu、Linux Mint 这样的基于 Debian 的系统上,可以使用这个命令安装它:

$ sudo apt-get install libsensors4-dev

在安装 Rust 和 libsensors 后,使用命令安装 Hegemon:

$ cargo install hegemon

安装 hegemon 后,使用以下命令开始监视 Linux 系统中正在运行的进程:

$ hegemon

以下是 Arch Linux 桌面的示例输出。

要退出,请按 Q。

请注意,hegemon 仍处于早期开发阶段,并不能完全取代 top 命令。它可能存在 bug 和功能缺失。如果你遇到任何 bug,请在项目的 GitHub 页面中报告它们。开发人员计划在即将推出的版本中引入更多功能。所以,请关注这个项目。

就是这些了。希望这篇文章有用。还有更多的好东西。敬请关注!

干杯!


via: https://www.ostechnix.com/hegemon-a-modular-system-monitor-application-written-in-rust/

作者:SK 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你使用过 top 命令来查看 Fedora 系统中的内存使用情况,你可能会惊讶,看起来消耗的数量比系统可用的内存更多。下面会详细介绍内存使用情况以及如何理解这些数据。

内存实际使用情况

操作系统对内存的使用方式并不是太通俗易懂。事实上,其背后有很多不为人知的巧妙技术在发挥着作用。通过这些方式,可以在无需用户干预的情况下,让操作系统更有效地使用内存。

大多数应用程序都不是系统自带的,但每个应用程序都依赖于安装在系统中的库中的一些函数集。在 Fedora 中,RPM 包管理系统能够确保在安装应用程序时也会安装所依赖的库。

当应用程序运行时,操作系统并不需要将它要用到的所有信息都加载到物理内存中。而是会为存放代码的存储空间构建一个映射,称为虚拟内存。操作系统只把需要的部分加载到内存中,当某一个部分不再需要后,这一部分内存就会被释放掉。

这意味着应用程序可以映射大量的虚拟内存,而使用较少的系统物理内存。特殊情况下,映射的虚拟内存甚至可以比系统实际可用的物理内存更多!而且在操作系统中这种情况也并不少见。

另外,不同的应用程序可能会对同一个库都有依赖。Fedora 中的 Linux 内核通常会在各个应用程序之间共享内存,而不需要为不同应用分别加载同一个库的多个副本。类似地,对于同一个应用程序的不同实例也是采用这种方式共享内存。

如果不首先了解这些细节,top 命令显示的数据可能会让人摸不着头脑。下面就举例说明如何正确查看内存使用量。

使用 top 命令查看内存使用量

如果你还没有使用过 top 命令,可以打开终端直接执行查看。使用 Shift + M 可以按照内存使用量来进行排序。下图是在 Fedora Workstation 中执行的结果,在你的机器上显示的结果可能会略有不同:

主要通过以下三列来查看内存使用情况:VIRT、RES 和 SHR。目前以 KB 为单位显示相关数值。

VIRT 列代表该进程映射的 虚拟 virtual 内存。如上所述,虚拟内存不是实际消耗的物理内存。例如, GNOME Shell 进程 gnome-shell 实际上没有消耗超过 3.1 GB 的物理内存,但它对很多更低或更高级的库都有依赖,系统必须对每个库都进行映射,以确保在有需要时可以加载这些库。

RES 列代表应用程序消耗了多少实际( 驻留 resident )内存。对于 GNOME Shell 大约是 180788 KB。例子中的系统拥有大约 7704 MB 的物理内存,因此内存使用率显示为 2.3%。

但根据 SHR 列显示,其中至少有 88212 KB 是 共享 shared 内存,这部分内存可能是其它应用程序也在使用的库函数。这意味着 GNOME Shell 本身大约有 92 MB 内存不与其他进程共享。需要注意的是,上述例子中的其它程序也共享了很多内存。在某些应用程序中,共享内存在内存使用量中会占很大的比例。

值得一提的是,有时进程之间通过内存通信,这些内存也是共享的,但 top 这样的工具却不一定能检测到,所以以上的说明也不一定准确。

关于交换分区

系统还可以通过交换分区来存储数据(例如硬盘),但读写的速度相对较慢。当物理内存渐渐用满,操作系统就会查找内存中暂时不会使用的部分,将其写出到交换区域等待需要的时候使用。

因此,如果交换内存的使用量一直偏高,表明系统的物理内存已经供不应求了。有时候一个不正常的应用也有可能导致出现这种情况,但如果这种现象经常出现,就需要考虑提升物理内存或者限制某些程序的运行了。

感谢 Stig Nygaard 在 Flickr 上提供的图片(CC BY 2.0)。


via: https://fedoramagazine.org/understand-fedora-memory-usage-top/

作者:Paul W. Frields 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过这篇教程提升你的 top 命令的知识。

尝试找出你的机器正在运行什么程序,以及哪个进程耗尽了内存导致系统非常非常慢 —— 这是 top 命令所能胜任的工作。

top 是一个非常有用的程序,其作用类似于 Windows 任务管理器或 MacOS 的活动监视器。在 *nix 机器上运行 top 将实时显示系统上运行的进程的情况。

$ top

取决于你运行的 top 版本,你会看到类似如下内容:

top - 08:31:32 up 1 day,  4:09,  0 users,  load average: 0.20, 0.12, 0.10
Tasks:   3 total,   1 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.3 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   4042284 total,  2523744 used,  1518540 free,   263776 buffers
KiB Swap:  1048572 total,        0 used,  1048572 free.  1804264 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   21964   3632   3124 S   0.0  0.1   0:00.23 bash
  193 root      20   0  123520  29636   8640 S   0.0  0.7   0:00.58 flask
  195 root      20   0   23608   2724   2400 R   0.0  0.1   0:00.21 top

你所用的 top 版本可能跟这个看起来不一样,特别是在显示的列上。

如何阅读输出的内容

你可以根据输出判断你正在运行的内容,但尝试去解释结果你可能会有些困惑。

前几行包含一堆统计信息(详细信息),后跟一个包含结果列的表(列)。让我们从后者开始吧。

列

这些是系统正在运行的进程。默认按 CPU 使用率降序排序。这意味着在列表顶部的程序正使用更多的 CPU 资源并对你的系统造成更重的负担。对于资源使用而言,这些程序是字面上的消耗资源最多的(top)进程。不得不说,top 这个名字起得很妙。

最右边的 COMMAND 一列报告进程名(启动它们的命令)。在这个例子里,进程名是 bash(一个我们正在运行 top 的命令解释器)、flask(一个 Python 写的 web 框架)和 top 自身。

其它列提供了关于进程的有用信息:

  • PID:进程 ID,一个用来定位进程的唯一标识符
  • USER:运行进程的用户
  • PR:任务的优先级
  • NI:Nice 值,优先级的一个更好的表现形式
  • VIRT:虚拟内存的大小,单位是 KiB(kibibytes)
  • RES:常驻内存大小,单位是 KiB(物理内存和虚拟内存的一部分)
  • SHR:共享内存大小,单位是 KiB(共享内存和虚拟内存的一部分)
  • S:进程状态,一般 I 代表空闲,R 代表运行,S 代表休眠,Z 代表僵尸进程,T 或 t 代表停止(还有其它更少见的选项)
  • %CPU:自从上次屏幕更新后的 CPU 使用率
  • %MEM:自从上次屏幕更新后的 RES 常驻内存使用率
  • TIME+:自从程序启动后总的 CPU 使用时间
  • COMMAND:启动命令,如之前描述那样

确切知道 VIRT,RES 和 SHR 值代表什么在日常操作中并不重要。重要的是要知道 VIRT 值最高的进程就是内存使用最多的进程。当你在用 top 排查为什么你的电脑运行无比卡的时候,那个 VIRT 数值最大的进程就是元凶。如果你想要知道共享内存和物理内存的确切意思,请查阅 top 手册的 Linux Memory Types 段落。

是的,我说的是 kibibytes 而不是 kilobytes。通常称为 kilobyte 的 1024 值实际上是 kibibyte。希腊语的 kilo(χίλιοι)意思是一千(例如一千米是 1000 米,一千克是 1000 克)。Kibi 是 kilo 和 binary 的合成词,意思是 1024 字节(或者 2 10 )。但是,因为这个词很难说,所以很多人在说 1024 字节的时候会说 kilobyte。top 试图在这里使用恰当的术语,所以按它说的理解就好。

屏幕更新说明

实时屏幕更新是 Linux 程序可以做的 非常酷 的事之一。这意味着程序能实时更新它们显示的内容,所以看起来是动态的,即使它们用的是文本。非常酷!在我们的例子中,更新时间间隔很重要,因为一些统计数据(%CPU 和 %MEM)是基于上次屏幕更新的数值的。

因为我们运行在一个持久性的程序中,我们就可以输入一些命令来实时修改配置(而不是停止应用,然后用一个不同的命令行选项再次运行)。

按下 h 调用帮助界面,该界面也显示了默认延迟(屏幕更新的时间间隔)。这个值默认(大约)是 3 秒,但你可以输入 d(大概是 delay 的意思)或者 s(可能是 screen 或 seconds 的意思)来修改它。

细节

在进程列表上面有一大堆有用的信息。有些细节看起来有点儿奇怪,让人困惑。但是一旦你花点儿时间来逐个过一遍,你会发现,在紧要关头,这些是非常有用的。

第一行包含系统的大致信息:

  • top:我们正在运行 top!你好!top!
  • XX:YY:XX:当前时间,每次屏幕更新的时候更新
  • up(接下去是 X day, YY:ZZ):系统的 uptime,或者自从系统启动后已经过去了多长时间
  • load average(后跟三个数字):分别是过去一分钟、五分钟、15 分钟的系统负载)

第二行(Task)显示了正在运行的任务的信息,不用解释。它显示了进程总数和正在运行的、休眠中的、停止的进程数和僵尸进程数。这实际上是上述 S(状态)列的总和。

第三行(%Cpu(s))显示了按类型划分的 CPU 使用情况。数据是屏幕刷新之间的值。这些值是:

  • us:用户进程
  • sy:系统进程
  • ni:nice#Etymology) 用户进程
  • id:CPU 的空闲时间,这个值比较高时说明系统比较空闲
  • wa:等待时间,或者消耗在等待 I/O 完成的时间
  • hi:消耗在硬件中断的时间
  • si:消耗在软件中断的时间
  • st:“虚拟机管理程序从该虚拟机窃取的时间”

你可以通过点击 t(toggle)来展开或折叠 Task 和 %Cpu(s) 行。

第四行(Kib Mem)和第五行(KiB Swap)提供了内存和交换空间的信息。这些数值是:

  • 总内存容量
  • 已用内存
  • 空闲内存
  • 内存的缓冲值
  • 交换空间的缓存值

默认它们是用 KiB 为单位展示的,但是按下 E(扩展内存缩放 extend memory scaling)可以轮换不同的单位:KiB、MiB、GiB、TiB、PiB、EiB(kilobytes、megabytes、gigabytes、terabytes、petabytes 和 exabytes)

top 用户手册有更多选项和配置项信息。你可以运行 man top 来查看你系统上的文档。还有很多 HTML 版的 man 手册,但是请留意,这些手册可能是针对不同 top 版本的。

两个 top 的替代品

你不必总是用 top 查看系统状态。你可以根据你的情况用其它工具来协助排查问题,尤其是当你想要更图形化或更专业的界面的时候。

htop

htop 很像 top,但是它带来了一些非常有用的东西:它可以以图形界面展示 CPU 和内存使用情况。

这是我们在刚才运行 top 的同一环境中 htop 的样子。显示更简洁,但功能却很丰富。

任务统计、负载、uptime 和进程列表仍然在,但是它有了漂亮、彩色、动态的每核 CPU 使用情况,还有图形化的内存使用情况。

以下是不同颜色的含义(你也可以通过按下 h 来获得这些信息的帮助)。

CPU 任务优先级或类型:

  • 蓝色:低优先级
  • 绿色:正常优先级
  • 红色:内核任务
  • 蓝色:虚拟任务
  • 条状图末尾的值是已用 CPU 的百分比

内存:

  • 绿色:已经使用的内存
  • 蓝色:缓冲的内存
  • 黄色:缓存内存
  • 条状图末尾的值显示已用内存和总内存

如果颜色对你没用,你可以运行 htop -C 来禁用它们;那样 htop 将使用不同的符号来展示 CPU 和内存类型。

它的底部有一组激活的快捷键提示,可以用来操作过滤结果或改变排序顺序。试着按一些快捷键看看它们能做什么。不过尝试 F9 时要小心,它会调出一个信号列表,这些信号会杀死(即停止)一个过程。我建议在生产环境之外探索这些选项。

htop 的作者 Hisham Muhammad(是的,htop 的名字就是源自 Hisham 的)在二月份的 FOSDEM 2018 做了一个简短的演讲。他阐述了 htop 不仅有简洁的图形界面,还有更现代的进程信息统计展示方式,这都是之前的工具(如 top)所不具备的。

你可以在手册页面或 htop 网站阅读更多关于 htop 的信息。(提示:网站背景是一个动态的 htop。)

docker stats

如果你在用 Docker,你可以运行 docker stats 来为容器状态生成一个有丰富上下文的界面。

这可能比 top 更有帮助,因为它不是按进程分类,而是按容器分类的。这点特别有用,当某个容器运行缓慢时,查看哪个容器耗资源最多比运行 top 再找到容器的进程要快。

借助于上面对 top 和 htop 术语的解释,你应该会更容易理解 docker stats 中的那些。然而,docker stats 文档对每一列都提供了详尽的描述。


via: https://opensource.com/article/18/8/top-tips-speed-up-computer

作者:Katie McLaughlin 选题:lujun9972 译者:ypingcn 校对:pityonline

本文由 LCTT 原创编译,Linux中国 荣誉推出

你已经知道 top 命令,对么?是的,它提供类 Unix 操作系统中运行中的进程的动态实时信息。一些开发人员为 top 命令构建了图形前端,因此用户可以在图形窗口中轻松找到他们系统的活动。其中之一是 Gotop。顾名思义,Gotop 是一个 TUI 图形活动监视器,使用 Go 语言编写。它是完全免费、开源的,受到了 gtop 和 vtop 的启发。

在此简要的指南中,我们将讨论如何安装和使用 Gotop 来监视 Linux 系统的活动。

安装 Gotop

Gotop 是用 Go 编写的,所以我们需要先安装它。要在 Linux 中安装 Go 语言,请参阅以下指南。

安装 Go 之后,使用以下命令下载最新的 Gotop 二进制文件。

$ sh -c "$(curl https://raw.githubusercontent.com/cjbassi/gotop/master/download.sh)"

然后,将下载的二进制文件移动到您的 $PATH 中,例如 /usr/local/bin/。

$ cp gotop /usr/local/bin

最后,用下面的命令使其可执行:

$ chmod +x /usr/local/bin/gotop

如果你使用的是基于 Arch 的系统,Gotop 存在于 AUR 中,所以你可以使用任何 AUR 助手程序进行安装。

使用 Cower:

$ cower -S gotop

使用 Pacaur:

$ pacaur -S gotop

使用 Packer:

$ packer -S gotop

使用 Trizen:

$ trizen -S gotop

使用 Yay:

$ yay -S gotop

使用 yaourt:

$ yaourt -S gotop

用法

Gotop 的使用非常简单!你所要做的就是从终端运行以下命令。

$ gotop

这样就行了!你将在简单的 TUI 窗口中看到系统 CPU、磁盘、内存、网络、CPU温度和进程列表的使用情况。

要仅显示CPU、内存和进程组件,请使用下面的 -m 标志:

$ gotop -m

你可以使用以下键盘快捷键对进程表进行排序。

  • c – CPU
  • m – 内存
  • p – PID

对于进程浏览,请使用以下键。

  • 上/下 箭头或者 j/k 键用于上移下移。
  • Ctrl-d 和 Ctrl-u – 上移和下移半页。
  • Ctrl-f 和 Ctrl-b – 上移和下移整页。
  • gg 和 G – 跳转顶部和底部。

按下 TAB 切换进程分组。要杀死选定的进程或进程组,请输入 dd。要选择一个进程,只需点击它。要向下/向上滚动,请使用鼠标滚动按钮。要放大和缩小 CPU 和内存的图形,请使用 h 和 l。要显示帮助菜单,只需按 ?。

就是这些了。希望这有帮助。还有更多好东西。敬请关注!

资源


via: https://www.ostechnix.com/gotop-yet-another-tui-graphical-activity-monitor-written-in-go/

作者:SK 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

最近 Linux 容器很火,我们中的大多数人甚至已经在使用它,同时一些人也开始学习它。

我们已经介绍了有名的 GUI(用户图形界面) 工具如 Portainer 和 Rancher 。这将会有助于我们通过 GUI 管理容器。

这篇指南将会通过 cTop 命令帮助我们理解和监控 Linux 容器。它是一个类似 top 命令的命令行工具。

什么是 cTop

ctop 为多个容器提供了一个简洁凝练的实时指标概览。它是一个类 top 的针对容器指标的界面。

它展示了容器指标比如 CPU 利用率、内存利用率、磁盘 I/O 读写、进程 ID(PID)和网络发送(TX - 从此服务器发送)以及接受(RX - 此服务器接受)。

ctop 带有对 Docker 和 runc 的内建支持;对其他容器和集群系统的连接计划在未来版本中推出。

它不需要任何参数并且默认使用 Docker 主机变量。

建议阅读:

如何安装 cTop

开发者提供了一个简单的 shell 脚本来帮助我们直接使用 ctop。我们要做的,只是在 /bin 目录下下载 ctop shell 文件来保证全局访问。最后给予 ctop 脚本文件执行权限。

在 /usr/local/bin 目录下下载 ctop shell 脚本。

$ sudo wget https://github.com/bcicen/ctop/releases/download/v0.7/ctop-0.7-linux-amd64 -O /usr/local/bin/ctop

对 ctop shell 脚本设置执行权限。

$ sudo chmod +x /usr/local/bin/ctop

另外你可以通过 docker 来安装和运行 ctop。在此之前先确保你已经安装过 docker。为了安装 docker,参考以下链接。

建议阅读:

$ docker run --rm -ti \
 --name=ctop \
 -v /var/run/docker.sock:/var/run/docker.sock \
 quay.io/vektorlab/ctop:latest

如何使用 cTop

直接启动 ctop 程序而不用任何参数。默认它绑定的 a 键用来展示所有容器(运行的和没运行的)。

ctop 头部显示你的系统时间和容器的总数。

$ ctop

你可能得到以下类似输出。

如何管理容器

你可以使用 ctop 来管理容器。选择一个你想要管理的容器然后按下回车键,选择所需选项如 start、stop、remove 等。

如何给容器排序

默认 ctop 使用 state 字段来给容器排序。按下 s 键来按不同的方面给容器排序。

如何查看容器指标

如何你想要查看关于容器的更多细节和指标,只用选择你想要查看的相应容器然后按 o 键。

如何查看容器日志

选择你想要查看日志的相应容器然后按 l 键。

仅显示活动容器

使用 -a 选项运行 ctop 命令来仅显示活动容器

打开帮助对话框

运行 ctop,只需按 h 键来打开帮助部分。


via: https://www.2daygeek.com/ctop-a-command-line-tool-for-container-monitoring-and-management-in-linux/

作者:2DAYGEEK 译者:kimii 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是 RAM?

在智能手机世界,我们每一个人都知道 RAM。因此,我不想深入介绍,这样我就简要概括下。RAM 代表“ 随机访问内存 ( Random Access Memory ) ”,是一种计算机数据存储,它会存储经常使用的程序来提升系统性能。

什么是虚拟内存?

虚拟内存是一种内存管理方式,计算机通过临时将最近未使用的程序数据从 RAM 转移到硬盘,以平衡或管理内存的短缺。

什么是 vmstat?

vmstat 是一个标准的工具,它会报告 Linux 系统的虚拟内存统计。vmstat 会报告有关进程、内存、分页、块 IO、陷阱(中断)和 cpu 活动的信息。它可以帮助 Linux 管理员在解决问题时识别系统瓶颈。

在 Linux 中安装 Sysstat

Linux 中没有独立的 vmstat 包。它与 sysstat 绑定在一起,并在大多数发行版的默认仓库上都有。如果还没有安装,只要基于你的发行版输入下面的命令。

[在 CentOS/RHEL 中安装 vmstat]
$ sudo yum install sysstat

[在 Fedora 中安装 vmstat]
$ sudo dnf install sysstat

[在 Debian/Ubuntu 中安装 vmstat]
$ sudo apt-get install sysstat

[在 Arch Linux 中安装 vmstat]
$ sudo pacman -S sysstat

[在 Mageia 中安装 vmstat]
$ sudo urpmi sysstat

[在 openSUSE 中安装 vmstat]
$ sudo zypper install sysstat

不带参数运行 vmstat

假设你已经成功安装 vmstat,在终端中不带参数运行 vmstat,它会向你展示 vmstat 的默认结果。

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 2  0  79496 1614120 139240 787928   0    0    23    10    0    0 11  1 88  0

当你看到上面的输出,你可能已经大致了解了它是什么以及它的目的。不要担心,我们将深入解释每个参数,以便你可以了解 vmstat 的用途和目的。

procs:procs 中有 r 和 b 列,它报告进程统计信息。在上面的输出中,在运行队列(r)中有两个进程在等待 CPU 并有零个休眠进程(b)。通常,它不应该超过处理器(或核心)的数量,如果你发现异常,最好使用 top 命令进一步地排除故障。

  • r:等待运行的进程数。
  • b:休眠状态下的进程数。

memory: memory 下有报告内存统计的 swpd、free、buff 和 cache 列。你可以用 free -m 命令看到同样的信息。在上面的内存统计中,统计数据以千字节表示,这有点难以理解,最好添加 M 参数来看到以兆字节为单位的统计数据。

  • swpd:使用的虚拟内存量。
  • free:空闲内存量。
  • buff:用作缓冲区的内存量。
  • cache:用作高速缓存的内存量。
  • inact:非活动内存的数量。
  • active:活动内存量。

swap:swap 有 si 和 so 列,用于报告交换内存统计信息。你可以用 free -m 命令看到相同的信息。

  • si:从磁盘交换的内存量(换入,从 swap 移到实际内存的内存)。
  • so:交换到磁盘的内存量(换出,从实际内存移动到 swap 的内存)。

I/O:I/O 有 bi 和 bo 列,它以“块读取”和“块写入”的单位来报告每秒磁盘读取和写入的块的统计信息。如果你发现有巨大的 I/O 读写,最好使用 iotop 和 iostat 命令来查看。

  • bi:从块设备接收的块数。
  • bo:发送到块设备的块数。

system:system 有 in 和 cs 列,它报告每秒的系统操作。

  • in:每秒的系统中断数,包括时钟中断。
  • cs:系统为了处理所以任务而上下文切换的数量。

CPU:CPU 有 us、sy、id 和 wa 列,报告(所用的) CPU 资源占总 CPU 时间的百分比。如果你发现异常,最好使用 top 和 free 命令。

  • us:处理器在非内核程序消耗的时间。
  • sy:处理器在内核相关任务上消耗的时间。
  • id:处理器的空闲时间。
  • wa:处理器在等待IO操作完成以继续处理任务上的时间。

以 MB 方式输出

默认情况下,vmstat 以千字节为单位显示内存统计,这是非常难以理解的,最好添加 -S m 参数以获取以兆字节为单位的统计。

# vmstat -S m
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0    103    371    406   2116    0    0    40    15    0    0 11  1 87  0

以延迟方式运行 vmstat 获取更好的统计信息

默认情况下,vmstat 的单次统计信息不足以进一步进行故障排除,因此,添加更新延迟(延迟是更新之间的延迟,以秒为单位)以定期捕获活动。如果你想以 2 秒延迟运行 vmstat ,只需使用下面的命令(如果你想要更长的延迟,你可以根据你的愿望改变)。

以下命令将每 2 秒运行一次,直到退出。

# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0 105500 325776 416016 2166912   0    0    40    15    0    0 11  1 87  0
 0  0 105500 325644 416016 2166920   0    0     0    13 1083 1174 11  1 87  0
 0  0 105500 308648 416024 2166928   0    0     1    16 1559 1453 16  2 82  0
 0  0 105500 285948 416032 2166932   0    0     0    12  934 1003  9  1 90  0
 0  0 105500 326620 416040 2166940   0    0     1    27  922 1068  9  1 90  0
 0  0 105500 366704 416048 2166944   0    0     0    17  835  955  9  1 90  0
 0  0 105500 366456 416056 2166948   0    0     1    22  859  918  9  1 90  0
 0  0 105500 366456 416056 2166948   0    0     0    15 1539 1504 17  2 81  0
 0  0 105500 365224 416060 2166996   0    0     1    19  984 1097 11  1 88  0

带延迟和计数运行 vmstat

或者,你可以带延迟和特定计数运行 vmstat,一旦达到给定的计数,然后自动退出。

以下命令将每 2 秒运行一次,10 次后自动退出。

# vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0  79496 1581916 157380 810412   0    0    23    10    0    1 11  1 88  0
 2  0  79496 1559464 157380 810416   0    0     1     1 1821 1749 21  2 77  0
 0  0  79496 1583768 157384 810416   0    0     1    46  681  799  9  1 90  0
 2  0  79496 1556364 157384 810428   0    0     1     1 1392 1545 15  2 83  0
 0  0  79496 1583272 157384 810428   0    0     1     0 1307 1448 14  2 84  0
 2  0  79496 1582032 157384 810428   0    0     1    41  424  605  4  1 96  0
 1  0  79496 1575848 157384 810428   0    0     1     0 1912 2407 26  2 71  0
 0  0  79496 1582884 157384 810436   0    0     1    69  678  825  9  1 90  0
 2  0  79496 1569368 157392 810432   0    0    11    26  920  969  9  1 90  0
 1  0  79496 1583612 157400 810444   0    0     7    39 2001 2530 20  2 77  0

显示活动和非活动内存

默认情况下,vmstat 会显示除活动和非活动内存之外的内存统计信息。如果要查看活动和非活动内存统计信息,请在 vmstat 后添加 -a 参数。

# vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa
 1  0 105500 2387592 415148 584112   0    0    40    15    0    1 11  1 87  0

打印磁盘统计

在 vmstat 后面添加 -d 参数会以每个磁盘一行的方式显示统计(包含读、写和 IO)。

# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
fd0        0      0       0       0      0      0       0       0      0      0
sda   16604050 904497 2594882190 57455732 30037054 28093770 2160032056 118189160      0  40915
sdb   257357577 479985 3124712204 577235320 8502519 1283237 36645890 11250948      0 182336

总结磁盘统计

在 vmstat 后面添加 -D 会显示全局统计(包括全部的磁盘、分区、全部读、合并的读、读取的扇区、写、合并的写、写入的扇区和 IO)。

# vmstat -D
           27 disks
            3 partitions
    275754028 total reads
      1388030 merged reads
   5751195976 read sectors
    638710116 milli reading
     38795040 writes
     29520659 merged writes
   2209820333 written sectors
    130210652 milli writing
            0 inprogress IO
       224704 milli spent IO

打印指定分区统计

vmstat 添加 -p 参数后面跟上设备名会显示指定分区统计(包括读、读取的扇区、写以及请求的写)。

# vmstat -p /dev/sdb1
sdb1          reads   read sectors  writes    requested writes
                3115      27890     839453  206728016

vmstat 统计信息带上时间戳

当你想在特定时间区间内找到内存尖峰时,用 vmstat 命令添加 -t 参数,后跟延迟和计数。

注意:此组合不适用于基于 Debian 的系统。

# vmstat -t 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 6981416 181324 24588604    0    0     0     1    0    0  0  0 100  0  0    2017-01-11 15:42:15 MST
 2  0      0 6981276 181324 24588604    0    0     0     0   91   40  0  0 100  0  0    2017-01-11 15:42:16 MST
 0  0      0 6982016 181324 24588604    0    0     0     0   75  116  0  0 100  0  0    2017-01-11 15:42:17 MST
 0  0      0 6982016 181324 24588604    0    0     0     0   43   39  0  0 100  0  0    2017-01-11 15:42:18 MST
 0  0      0 6982280 181324 24588604    0    0     0     0  113  185  0  0 100  0  0    2017-01-11 15:42:19 MST

打印更多统计

vmstat 后面跟上 -s 参数会显示不同统计的总结。

# vmstat -s
     32849392  total memory
     25864128  used memory
     16468180  active memory
      8320888  inactive memory
      6985264  free memory
       181324  buffer memory
     24588612  swap cache
     20970492  total swap
            0  used swap
     20970492  free swap
       891075 non-nice user cpu ticks
         6532 nice user cpu ticks
      1507099 system cpu ticks
  18925265601 idle cpu ticks
       113043 IO-wait cpu ticks
          108 IRQ cpu ticks
         4185 softirq cpu ticks
            0 stolen cpu ticks
      4071862 pages paged in
    216759718 pages paged out
            0 pages swapped in
            0 pages swapped out
    369611221 interrupts
    477861261 CPU context switches
   1478258826 boot time
      2196121 forks

打印 slab 统计

vmstat 后面跟上 -m 参数会显示 slab 信息。

# vmstat -m
Cache                       Num  Total   Size  Pages
nf_conntrack_expect           0      0    240     16
nf_conntrack_ffffffff81b2a920     18     60    312     12
fib6_nodes                   24     59     64     59
ip6_dst_cache                16     30    384     10
ndisc_cache                   7     30    256     15
ip6_mrt_cache                 0      0    128     30
RAWv6                        35     35   1088      7
UDPLITEv6                     0      0   1024      4
UDPv6                         4     12   1024      4
tw_sock_TCPv6                 0      0    320     12
request_sock_TCPv6            0      0    192     20
TCPv6                         4      6   1920      2
fat_inode_cache               5      6    672      6
fat_cache                     0      0     32    112
ioat2                      4096   4140    128     30
ext4_inode_cache          34322  34364   1000      4
ext4_xattr                    0      0     88     44
.
.
.

阅读更多关于 vmstat

如果你想了解关于 vmstat 的更多选项,请阅读手册。

# vmstat --help
或者
# man vmstat

作者简介:

Magesh Maruthamuthu,热爱玩所有的 Linux 发行版


via: http://www.2daygeek.com/linux-vmstat-command-examples-tool-report-virtual-memory-statistics/

作者:Magesh Maruthamuthu 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出