第 6 章 · 02 实时观测:`top`、`htop`


文档摘要

第 6 章 · 02 实时观测: 、 本节摘要: 给进程拍快照,但排查「CPU 突然飙高」「内存慢慢涨」这类问题时,你需要的是「录像」——实时刷新看变化。这就是 。它是终端里的「任务管理器」,每隔几秒刷新一次,顶部显示系统整体负载(负载均衡、CPU、内存),下方列出进程按某资源排序。本节要带你读懂 的每个区域与每列含义,掌握几个交互键( 按 CPU 排序、 按内存、 看每核、 杀进程),并介绍更友好的升级版 。读完本节,你能在「系统卡了」的瞬间快速定位是哪个进程在捣乱。 内容来源:原项目「Linux 命令大全」 ,精选并套用体系化模板。 学习目标 阅读完本节,你应当能够: 读懂 的两个区域:顶部系统负载概览 + 下方进程列表。

第 6 章 · 02 实时观测:tophtop

本节摘要:ps 给进程拍快照,但排查「CPU 突然飙高」「内存慢慢涨」这类问题时,你需要的是「录像」——实时刷新看变化。这就是 top。它是终端里的「任务管理器」,每隔几秒刷新一次,顶部显示系统整体负载(负载均衡、CPU、内存),下方列出进程按某资源排序。本节要带你读懂 top 的每个区域与每列含义,掌握几个交互键(P 按 CPU 排序、M 按内存、1 看每核、k 杀进程),并介绍更友好的升级版 htop。读完本节,你能在「系统卡了」的瞬间快速定位是哪个进程在捣乱。

内容来源:原项目「Linux 命令大全」command/top.md,精选并套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. 读懂 top 的两个区域:顶部系统负载概览 + 下方进程列表。
  2. 解读顶部三行:负载均衡(load average)、CPU 占用(us/sy/id/wa)、内存(swap)。
  3. 掌握交互键:P(按 CPU 排序)、M(按内存)、1(看每核 CPU)、k(杀进程)、q(退出)。
  4. 说清 load average 三个数字的含义(1/5/15 分钟平均负载)及「多少算高」。
  5. htop 获得更直观的视图,理解它相对 top 的优势。

一、设计动机:top 解决的是「动态变化」问题

ps aux 是一次性的——你敲一次,它打印一次快照就退出。但系统的负载是动态的:某个进程可能在「你敲 ps 的那一秒」恰好不忙,下一秒又飙起来。ps 抓不到这种波动。

top 的设计就是「周期性刷新」:默认每 3 秒重新采样一次,把系统整体状况与进程列表持续刷新到屏幕。这样你能看到「CPU 占用是不是在涨」「哪个进程的内存持续上升」「系统负载有没有缓解」。

二、高频组合与实战

top 的输出分两块

top - 10:30:15 up 5:30, 2 users, load average: 0.20, 0.15, 0.10 ← 系统概览 Tasks: 120 total, 1 running, 119 sleeping, 0 zombie %Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 92.5 id, 0.5 wa MiB Mem : 16000.0 total, 8000.0 free, 6000.0 used, 2000.0 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used PID USER %CPU %MEM TIME+ COMMAND ← 进程列表 1234 user 85.0 5.0 1:23.4 chrome 5678 user 2.1 1.2 0:05.1 bash

解读系统概览区

  • load average: 0.20, 0.15, 0.10:1 分钟、5 分钟、15 分钟的平均负载。经验值:数字小于 CPU 核数算正常,持续大于核数说明过载(单核机器上 >1 就要警觉)。
  • %Cpu(s): 5.0 us, 2.0 sy, 92.5 id:us 用户态、sy 内核态、id 空闲。id 高说明 CPU 闲;us 高说明用户程序在忙;wa(wait)高说明在等 IO(磁盘慢的征兆)。
  • MiB Mem: ... used, free, buff/cache:buff/cache 是内核用作缓冲的内存,「可用」要看 free 加这部分,不是只看 used(详见第 06 节)。

关键交互键

作用
P %CPU 降序排序(找吃 CPU 的进程)
M %MEM 降序排序(找吃内存的进程)
1 展开显示每个 CPU 核心的占用(而非汇总)
k 输入 PID 杀进程(会提示输入 PID 与信号)
r renice,改进程优先级
q 退出
空格 立即刷新一次
h 帮助

💡 技巧:「系统卡了先敲 top,按 P 看谁吃 CPU,按 M 看谁吃内存」——这是排查性能问题的第一反应,几乎能定位 80% 的「卡顿」问题。

进程列表的 TIME+

TIME+psTIME 精度更高(到百分秒),表示进程累计占用的 CPU 时间。注意这不是「进程活了多久」,而是「它实际用了多少 CPU 时间」——一个睡了 10 小时的进程,TIME+ 可能只有几秒。

三、htop:更友好的升级版

htoptop 的现代替代品(通常需单独装:apt install htop)。它的优势:

  • 彩色 + 进程条:CPU/内存用彩色进度条直观展示。
  • 横向滚动:命令太长可以左右滚动看全。
  • 树形视图:F5 切换树形,看进程的父子关系。
  • 直接操作:F9 发信号、F7/F8 调优先级,鼠标也能点。

如果系统装了 htop,日常排查用它比 top 舒服得多。但 top所有系统都自带的,服务器上没装 htop 时,top 是保底工具。

四、踩坑与排错

坑 1:误读 load average

load average: 8.00, 8.00, 8.00 # 这算高吗?

取决于 CPU 核数。8 核机器上 load 8.0 算刚好满载(健康);4 核机器上 load 8.0 说明严重过载(排队了一倍)。判断前先 nproc 看核数。

坑 2:以为 used 内存高就是内存不够

MiB Mem: 16000 total, 1000 free, 14000 used, 1000 buff/cache

看到 used 14000free 1000 就慌?Linux 会把空闲内存拿来做磁盘缓冲(buff/cache),程序要内存时内核会自动释放这部分。真正的「内存紧张」看 swap 是否被大量使用、或 free+buff/cache 都很少。详见第 06 节。

坑 3:在 top 里误杀进程

top 里按 k 会让你输入 PID 和信号。输错 PID 可能杀掉重要进程。生产环境慎用 topk,改用退出 top 后单独 kill 更可控

本节要点回顾

  1. top 是实时刷新的「任务管理器」,周期采样,弥补 ps 只能拍快照的不足。
  2. 顶部三行关键:load average(负载,对比 CPU 核数判断)、%Cpu(id 高=闲,wa 高=等 IO)、Mem(used 高未必紧张,看 buff/cache 与 swap)。
  3. 交互键:P 按 CPU 排序、M 按内存、1 看每核、k 杀进程、q 退出。
  4. load average 要对比核数:小于核数算正常,持续大于核数说明过载;先 nproc 看核数再判断。
  5. htop 是更友好的升级版(彩色、树形、鼠标),但 top 是所有系统的保底工具。
  6. TIME+ 是累计 CPU 时间,不是存活时间——睡了很久的进程 TIME+ 可能很小。

下一节讲进程状态机——读懂 STAT 列每个字母背后的完整生命周期,以及「僵尸进程」为什么危险。


发布者: 作者: 灏天文库 转发
评论区 (0)
U