Linux 中 top 命令的使用技巧

通过本教程提升您的 'top' 命令知识。
292 位读者喜欢这篇文章。
How Linux became my job

Opensource.com

想要找出您的机器上正在运行什么——以及哪个进程占用了所有内存并导致速度变慢——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 资源,并给您的系统带来更多的负载。它们实际上是按资源使用率排列的“顶部”进程。您不得不承认,这是一个聪明的名字。

最右侧的 COMMAND 列报告进程的名称(您运行以启动它们的命令)。在本例中,它们是 bash(我们正在其中运行 top 的命令解释器)、flask(一个用 Python 编写的 Web 微框架)和 top 本身。

其他列提供有关进程的有用信息

  • PID进程 ID,用于寻址进程的唯一标识符
  • USER:运行进程的用户
  • PR:任务的优先级
  • NI:优先级的更友好的表示形式
  • VIRT:虚拟内存大小,单位为 KiB (千字节)*
  • RES:常驻内存大小,单位为 KiB*(“物理内存”,是 VIRT 的子集)
  • SHR:共享内存大小,单位为 KiB*(“共享内存”,是 VIRT 的子集)
  • S:进程状态,通常 I=空闲,R=运行,S=睡眠,Z=僵尸,Tt=停止(还有其他不太常见的选项)
  • %CPU:自上次屏幕更新以来 CPU 使用率的百分比
  • %MEM:自上次屏幕更新以来 RES 内存使用率的百分比
  • TIME+:自进程启动以来使用的总 CPU 时间
  • COMMAND:命令,如上所述

*确切了解 VIRTRESSHR 值代表什么在日常操作中并真正重要。重要的是要知道 VIRT 值最大的进程是使用最多内存的进程。如果您运行 top 是因为您正在调试为什么您的计算机感觉像是在一池糖浆中,那么 VIRT 数字最大的进程就是罪魁祸首。如果您想确切了解“共享”和“物理”内存的含义,请查看 top 手册 中的“Linux 内存类型”。

而且,是的,我确实想输入千字节,而不是千字节。您通常称为千字节的 1,024 值实际上是千比字节。希腊语 kilo (“χίλιοι”) 意思是,表示 1,000 个某物(例如,一公里是一千米,一公斤是一千克)。Kibi 是 kilobyte 的组合词,它表示 1,024 字节(或 210)。但是,由于单词很难说,许多人在表示 1,024 字节时会说千字节。所有这些都意味着 top 试图在此处使用正确的术语,所以请接受它。#你知道的越多?。

关于屏幕更新的说明

实时屏幕更新是 Linux 程序可以做的客观上非常酷的事情之一。这意味着它们可以实时更新自己的显示,因此它们看起来是动画的。即使它们使用的是文本。太酷了!在我们的例子中,更新之间的时间很重要,因为我们的一些统计信息(%CPU%MEM)是基于自上次屏幕更新以来的值。

而且由于我们在持久应用程序中运行,我们可以按下按键命令来实时更改设置或配置(而不是,例如,关闭应用程序并使用不同的命令行标志再次运行应用程序)。

键入 h 会调用“帮助”屏幕,该屏幕也显示默认延迟(屏幕更新之间的时间)。默认情况下,此值为(大约)三秒,但您可以通过键入 d(可能是“延迟”的缩写)或 s(可能是“屏幕”或“秒”的缩写)来更改它。

详细信息

在进程列表上方,还有一大堆其他有用的信息。其中一些详细信息可能看起来很奇怪且令人困惑,但是一旦您花一些时间逐步了解每一个细节,您会发现它们是非常有用的统计数据,可以在紧要关头调出。

第一行包含常规系统信息

  • top:我们正在运行 top!你好 top
  • XX:YY:XX:时间,每次屏幕更新时都会更新
  • up(然后是 X 天,YY:ZZ):系统的正常运行时间,或自系统启动以来经过的时间
  • load average(然后是三个数字):过去一分钟、五分钟和十五分钟的系统负载,分别为

第二行 (Tasks) 显示有关正在运行的任务的信息,这很容易理解。它显示了进程总数以及正在运行、睡眠、停止和僵尸进程的数量。这实际上是上面描述的 S状态)列的总和。

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

  • us:用户进程
  • sy:系统进程
  • ninice 用户进程
  • id:CPU 的空闲时间;高空闲时间意味着没有太多其他事情发生
  • wa:等待时间,或花费在等待 I/O 完成上的时间
  • hi:花费在等待硬件中断上的时间
  • si:花费在等待软件中断上的时间
  • st:“虚拟机从虚拟机监控程序窃取的时间”

您可以通过键入 t(“切换”的缩写)来折叠 Tasks%Cpu(s) 行。

第四行 (KiB Mem) 和第五行 (KiB Swap) 提供有关内存和交换的信息。这些值是

  • 总计
  • 已用
  • 可用

还有

  • 内存 buffers
  • 交换 cached Mem

默认情况下,它们以 KiB 列出,但是按 E(“扩展内存缩放”的缩写)会在不同的值之间循环:千比字节、兆比字节、吉比字节、太比字节、拍比字节和艾比字节。(也就是说,千字节、兆字节、千兆字节、兆兆字节、拍字节和艾字节,但它们的“真名”。)

top 用户手册显示了有关有用的标志和配置的更多信息。要在您的系统上找到手册,您可以运行 man top。有各种网站显示 手册的 HTML 渲染,但请注意,这些可能适用于不同版本的 top

两个 top 替代方案

您不必总是使用 top 来了解正在发生的事情。根据您的情况,其他工具可能会帮助您诊断问题,尤其是在您想要更图形化或更专业的界面时。

htop

htoptop 非常相似,但它带来了一些非常有用的东西:CPU 和内存使用情况的图形表示。

Docker image's processes in htop

这就是我们在 top 中检查的环境在 htop 中的外观。显示更简单,但功能仍然丰富。

我们的任务计数、负载、正常运行时间和进程列表仍然存在,但是我们获得了每个核心的 CPU 使用率以及内存使用情况图表的漂亮、彩色、动画视图。

以下是不同颜色的含义(您也可以通过按 h 获取“帮助”来获得此信息)。

CPU 任务优先级或类型

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

内存

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

如果颜色对您没有用,您可以运行 htop -C 来禁用它们;相反,htop 将使用不同的符号来分隔 CPU 和内存类型。

在底部,有一个有用的活动功能键显示,您可以使用这些功能键来执行诸如过滤结果或更改排序顺序之类的操作。尝试一些命令以查看它们的作用。在尝试 F9 时要小心。这将弹出一个信号列表,该列表将杀死(即停止)进程。我建议在生产环境之外探索这些选项。

htop 的作者 Hisham Muhammad(是的,它在 Hisham 之后被称为 htop)在 2 月的 FOSDEM 2018 上就 htop 发表了 闪电演讲。他解释了 htop 不仅具有简洁的图形,而且还展示了有关进程的更现代的统计信息,而较旧的监视实用程序(如 top)则没有。

您可以在 手册页htop 网站 上阅读有关 htop 的更多信息。(警告:该网站包含 htop 的动画背景。)

docker stats

如果您正在使用 Docker,则可以运行 docker stats 以生成容器正在执行的操作的上下文丰富的表示形式。

这可能比 top 更有帮助,因为它是按容器而不是按进程分隔的。当容器速度较慢时,这尤其有用,因为查看哪个容器正在使用最多的资源比运行 top 并尝试将进程映射到容器更快。

上面对 tophtop 中首字母缩略词和描述符的解释应该使您很容易理解 docker stats 中的那些。但是,docker stats 文档 提供了每个列的有用描述。

标签
User profile image.
多年来,Katie 担任过许多不同的角色。她以前曾担任多种语言的软件开发人员、多个操作系统的系统管理员以及许多不同主题的演讲者。当她不改变世界时,她喜欢烹饪、编织挂毯,并观察各种应用程序堆栈处理表情符号的效果如何。

1 条评论

在我的 top 版本(MX linux 自带的版本)中,我喜欢查看 CPU 所有核心(线程)上的负载。
启动 top 后,按数字“1”键,现在 CPU 负载将显示在每个核心/线程上。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© 2025 open-source.net.cn. All rights reserved.