【10】top工具入门

2 阅读10分钟

[26/3/24]top工具

各个 Top 的学习目标

  1. top: 必须会看头部信息以及排序,无需精通
  2. htop:能用来查进程树、内存泄漏,杀掉僵尸进程
  3. btop:支持鼠标,不用单独学习

Top 工具

  1. 查看平均负载

第一行的右侧:load average: 0.02, 0.05, 0.00

这三个数字分别代表过去 1分钟、5分钟、15分钟 内系统的平均负载。

要与电脑的逻辑核心数比大小,如果超过逻辑核心数,那么就很卡了。

  1. 查看 IO 等待

第三行:%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

这一行只看 wa,其全称为:I/O Wait,含义是:CPU 正在“干等”硬盘/网卡读写数据的时间百分比。

如果 wa 数值很高(比如 30.0 甚至更高),说明 CPU 没偷懒,是硬盘读写太慢了。这时候换更快的 SSD 或者优化模型读取方式,而不是去优化代码逻辑。

  1. 排序显示

(注意都是大写字母!需要 shift)****

M :内存占用排序

P :CPU占用排序

q : 退出 top


Htop 工具

界面布局

A. 顶部区域:系统仪表盘

这是最上面几行,显示的是“整体状况”。

  • 左侧:你会看到 CPU 的使用率进度条(通常有 1 到 8 个甚至更多,取决于你的 CPU 核心数),下面是内存和交换分区的进度条。
  • 右侧:显示任务、线程、平均负载和运行时间。

B. 中间区域:进程列表

这是占据屏幕最大空间的区域,显示当前正在运行的程序列表。

  • 默认情况下,列表是按照 CPU 使用率排序的。
  • 每一行代表一个进程,每一列代表不同的属性。
  • 最关键的是:你可以用键盘的上下方向键滚动查看,这在普通的 top 命令里是做不到的(普通 top 默认只显示一屏)。

C. 底部区域:功能菜单

屏幕最底下有一行带背景色的提示,例如 F1 Help、F2 Setup 等。


顶部系统状态详解

1. CPU 栏:那些颜色代表什么?

你看到的 16 个进度条,里面可能填充了不同颜色。这些颜色代表了 CPU 时间的不同去向:

  • 蓝色:表示 低优先级进程 使用的 CPU(Nice 值为正的进程)。
  • 绿色:表示 用户空间进程 使用的 CPU(这是我们最常关注的部分,比如你的应用程序、网页等)。
  • 红色:表示 内核空间进程 使用的 CPU(系统底层操作,如驱动、文件系统操作)。
  • 青色:表示 I/O 等待(CPU 正在等待硬盘或网卡的数据,如果这个很高,说明硬盘读写可能是瓶颈)。

小技巧:如果你想知道确切的含义,在 Htop 界面按 h 键,可以看到帮助图例。

2. 内存栏:物理内存 vs 交换内存

CPU 栏下面通常有两个关于内存的进度条:

  • Mem (Memory):物理内存(你的 RAM 条)。
    • 绿色:已使用的内存。
    • 蓝色:缓冲区/缓存。这部分内存虽然被占用了,但如果程序需要,系统会立刻释放它,所以不算真正的“满”。
  • Swp (Swap):交换分区(虚拟内存)。
    • 当物理内存不够用时,系统会把一部分数据临时存到硬盘上。
    • 经验法则:如果这个进度条开始变红,说明你的物理内存严重不足,电脑可能会变卡。

3. Load Average(平均负载)

在右上角,你会看到类似 load average: 0.50, 0.60, 0.55 的三个数字。这是衡量系统“忙碌程度”的关键指标:

  • 这三个数字分别代表:过去 1分钟、5分钟、15分钟 内的平均负载。
  • 怎么判断负载高不高?
    • 我们要和核心数做对比。你的电脑有 16 个核心。
    • 如果平均负载是 1.0,意味着有一个核心在满负荷工作,其他 15 个在休息。
    • 如果平均负载是 16.0,意味着所有核心都在满负荷工作。
    • 如果平均负载超过 16.0(比如 20.0),说明任务排起了长队,系统开始卡顿了。

对你来说:只要这三个数字通常小于 16,你的系统就是健康的。


进程管理

1. 进程排序:谁占用了最多的资源?

默认情况下,Htop 是按 CPU 使用率(%)从高到低排序的。但有时我们需要找占用内存最大的程序。

  • 快捷键法: (注意是大写的,要按 Shift!)
    • P 键:按 CPU 使用率排序(默认)。
    • M 键:按内存使用率排序。
    • T 键:按运行时间排序。
  • 鼠标法(如果你的终端支持):
    • 直接用鼠标点击顶部的列标题(如 CPU%MEM%),点击一次升序,再点一次降序。

2. 进程搜索:我知道它的名字

如果你想找一个特定的程序(比如你想找 bash 进程),在几百个列表里用眼睛找太累了。

  • 操作:按键盘上的 F3 键。
  • 效果:屏幕底部会出现一个搜索框。
  • 输入:输入你要找的进程名(例如 bash),Htop 会自动高亮显示匹配的进程,你可以按 F3 继续查找下一个匹配项。

3. 进程筛选:只看我想看的

如果你只想看属于当前用户的进程,或者只看名字里包含 python 的进程,筛选功能非常有用。

  • 操作:按键盘上的 F4 键。
  • 效果:屏幕底部会出现一个筛选框。
  • 输入:输入关键词(例如 system),列表会瞬间“变干净”,只显示包含该关键词的进程。
  • 退出筛选:再次按 F4 清空输入框,或者按 Esc 键退出筛选模式。
  • 多个条件可以用 | 隔开,比如:bash|python(显示名字里有 bash 或 python 的)。
  • 补充:要查看某个用户的进程需要按 u

杀死进程

  1. 先找到进程,保证高亮行选中需要操作的进程
  2. 按下 F9 或者 k 这样就可以打开发送列表
  3. 在发送列表里选择需要发送的信号,然后回车
  4. 一般是 15 正常退出;9 强制杀死。

查看进程树

1. 树状视图:看清“家族谱系”

之前我们看到的都是平铺的列表。按一下 F5 键,世界立刻变得立体了。

  • 操作:按 F5
  • 效果:列表会变成树状结构,类似于 pstree 命令的输出。
  • 解读:
    • 你会看到进程前面有竖线()和分支(├─)。
    • 顶层的通常是 systemd (PID 1) 或 init,它是所有进程的“祖宗”。
    • 父进程与子进程:如果进程 A 下面连着进程 B,那么 A 是父进程,B 是子进程。

应用场景:
刚才你提到的僵尸进程,在树状视图里通常会标注为 <defunct><zombie>。如果你发现一个僵尸进程,你需要顺着树状图往上找,找到它的父进程,通常只有重启或杀死父进程,僵尸进程才会消失。

2. 自定义配置:想看什么由你定

有时候我们需要看进程的 IO 情况(读写硬盘的速度),或者想知道进程的启动完整命令,默认的列可能不够用。

  • 进入设置:按 F2 键。屏幕左侧会出现 Setup 菜单。
  • 添加列:
    1. 在左侧菜单选择 Columns(通常默认就是选中这个)。
    2. 在右侧的列表里移动光标,找到你感兴趣的项,比如:
      • IO_RATE:当前的读写速率。
      • PPID:父进程 ID。
      • Command:完整的启动命令(默认显示的比较短)。
    1. 选中你想添加的项目,按 F5 (Add),它就会出现在右边的已选列表中。
  • 移动列:在已选列表中,按 F6 或方向键调整列的左右顺序。
  • 退出设置:按 F10Esc 保存并退出。

3. 设置保存

Htop 会自动将你的配置(包括你添加的列、排序方式、是否开启树状视图等)保存在 ~/.config/htop/htoprc 文件中。下次打开时,它依然是你上次设置的样子。


Nice 值与进程优先级

1. 使用场景

想象这样一个场景:
你在一个边缘设备上部署了一个 AI 模型进行实时视频检测(这是最消耗 CPU/GPU 的任务),同时设备还在后台运行一些日志上传、系统维护脚本。

  • 如果不调优先级:后台的日志脚本可能会抢占 CPU,导致你的 AI 检测帧率下降,画面卡顿,这在实时检测中是不可接受的。
  • 如果调了优先级:你可以告诉系统:“AI 进程是老板,日志脚本是路人。CPU 必须先伺候好 AI,有空了再去跑日志。”

这就是 Nice 值 的作用。

2. 什么是 Nice 值?

在 Linux 中,优先级用 Nice 值 来表示,范围是 -20 到 19。

  • -20:最高优先级(非常“霸道”,也就是很不 Nice)。
  • 0:默认优先级。
  • 19:最低优先级(非常“谦让”,也就是很 Nice)。

核心逻辑:数值越小,优先级越高;数值越大,优先级越低。

3. Htop 中的操作方法

在 Htop 中,调整优先级非常简单:

  1. 选中进程:用方向键选中你的目标进程。
  2. 提高优先级(变小):按键盘上的 F7 键(对应 Nice -)。这会让 Nice 值变小,进程变得更重要。
    • 注意:提高优先级(变负数)通常需要 Root 权限。
  1. 降低优先级(变大):按键盘上的 F8 键(对应 Nice +)。这会让 Nice 值变大,进程变得谦让。

4. 如何在 Htop 中看 Nice 值?

在进程列表中,有一列叫 NI (Nice)。

  • 大部分进程默认是 0
  • 如果你按了 F7,它可能变成 -1, -2
  • 如果你按了 F8,它可能变成 1, 2

5. 补充知识

作为 Edge AI 工程师,Nice 值是压榨硬件性能、保证实时性的利器。

  • 高优先级 (-20 ~ -1):留给关键的 AI 推理进程、实时控制进程。
  • 默认优先级 (0):留给常规业务。
  • 低优先级 (1 ~ 19):留给后台备份、日志清理等无关紧要的任务。

实用补充:H

(注意是大写的 H )

功能:开启/关闭用户线程显示,或者说,用来查看子线程。

因为写的程序可能是多线程的,那么具体是哪个线程导致的性能瓶颈呢?

就需要先按 H 再按 P,按照 CPU 排序看哪个子线程占用最多。

实用补充:s

功能:会调用strace 工具,在屏幕上打印你的程序正在请求的所有操作系统内核接口(系统调用)

这可以用来排查,当前的程序那么高占用是为什么,比如说死循环读取一个不存在的文件。

知识点补充:关于内存

实战惊魂场景: 当你把模型部署到一台只有 8GB 内存的边缘设备上,模型跑了几天后,你打开 htop,会惊恐地发现物理内存的进度条几乎是全满的(大部分是蓝色或黄色,取决于终端配色) ! 很多新手此时会立刻慌神,以为发生了严重的内存泄漏,甚至准备重启机器。

Linux 的设计理念是 “Free memory is wasted memory”(空闲的内存就是被浪费的内存) 。 当你的程序读取过一个 1GB 的模型文件后,即使程序退出了,Linux 也会把这 1GB 的数据死死地留在内存的 cache 里。为什么?因为万一你马上又要跑这个模型呢?直接从内存读(极速)总比再去读慢吞吞的硬盘好。

你应该怎么看?htop 里,永远不要被那根长长的、包含 cache 的内存条吓到。 真正衡量你程序是否漏内存的,绝对不是看系统总内存,而是要在下面具体的进程列表里,死死盯住你那个程序的 RES (常驻内存) 这一列。如果 RES 随着时间推移像爬楼梯一样稳步上涨且从不回落,那才是真正的 C++ 内存泄漏!