第 6 章 · 02 实时观测: 、 本节摘要: 给进程拍快照,但排查「CPU 突然飙高」「内存慢慢涨」这类问题时,你需要的是「录像」——实时刷新看变化。这就是 。它是终端里的「任务管理器」,每隔几秒刷新一次,顶部显示系统整体负载(负载均衡、CPU、内存),下方列出进程按某资源排序。本节要带你读懂 的每个区域与每列含义,掌握几个交互键( 按 CPU 排序、 按内存、 看每核、 杀进程),并介绍更友好的升级版 。读完本节,你能在「系统卡了」的瞬间快速定位是哪个进程在捣乱。 内容来源:原项目「Linux 命令大全」 ,精选并套用体系化模板。 学习目标 阅读完本节,你应当能够: 读懂 的两个区域:顶部系统负载概览 + 下方进程列表。
top、htop本节摘要:
ps给进程拍快照,但排查「CPU 突然飙高」「内存慢慢涨」这类问题时,你需要的是「录像」——实时刷新看变化。这就是top。它是终端里的「任务管理器」,每隔几秒刷新一次,顶部显示系统整体负载(负载均衡、CPU、内存),下方列出进程按某资源排序。本节要带你读懂top的每个区域与每列含义,掌握几个交互键(P按 CPU 排序、M按内存、1看每核、k杀进程),并介绍更友好的升级版htop。读完本节,你能在「系统卡了」的瞬间快速定位是哪个进程在捣乱。
内容来源:原项目「Linux 命令大全」
command/top.md,精选并套用体系化模板。
阅读完本节,你应当能够:
top 的两个区域:顶部系统负载概览 + 下方进程列表。P(按 CPU 排序)、M(按内存)、1(看每核 CPU)、k(杀进程)、q(退出)。load average 三个数字的含义(1/5/15 分钟平均负载)及「多少算高」。htop 获得更直观的视图,理解它相对 top 的优势。top 解决的是「动态变化」问题ps aux 是一次性的——你敲一次,它打印一次快照就退出。但系统的负载是动态的:某个进程可能在「你敲 ps 的那一秒」恰好不忙,下一秒又飙起来。ps 抓不到这种波动。
top 的设计就是「周期性刷新」:默认每 3 秒重新采样一次,把系统整体状况与进程列表持续刷新到屏幕。这样你能看到「CPU 占用是不是在涨」「哪个进程的内存持续上升」「系统负载有没有缓解」。
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+ 比 ps 的 TIME 精度更高(到百分秒),表示进程累计占用的 CPU 时间。注意这不是「进程活了多久」,而是「它实际用了多少 CPU 时间」——一个睡了 10 小时的进程,TIME+ 可能只有几秒。
htop 是 top 的现代替代品(通常需单独装:apt install htop)。它的优势:
F5 切换树形,看进程的父子关系。F9 发信号、F7/F8 调优先级,鼠标也能点。如果系统装了 htop,日常排查用它比 top 舒服得多。但 top 是所有系统都自带的,服务器上没装 htop 时,top 是保底工具。
load averageload average: 8.00, 8.00, 8.00 # 这算高吗?
取决于 CPU 核数。8 核机器上 load 8.0 算刚好满载(健康);4 核机器上 load 8.0 说明严重过载(排队了一倍)。判断前先 nproc 看核数。
used 内存高就是内存不够MiB Mem: 16000 total, 1000 free, 14000 used, 1000 buff/cache
看到 used 14000、free 1000 就慌?Linux 会把空闲内存拿来做磁盘缓冲(buff/cache),程序要内存时内核会自动释放这部分。真正的「内存紧张」看 swap 是否被大量使用、或 free+buff/cache 都很少。详见第 06 节。
top 里按 k 会让你输入 PID 和信号。输错 PID 可能杀掉重要进程。生产环境慎用 top 的 k,改用退出 top 后单独 kill 更可控。
top 是实时刷新的「任务管理器」,周期采样,弥补 ps 只能拍快照的不足。load average(负载,对比 CPU 核数判断)、%Cpu(id 高=闲,wa 高=等 IO)、Mem(used 高未必紧张,看 buff/cache 与 swap)。P 按 CPU 排序、M 按内存、1 看每核、k 杀进程、q 退出。load average 要对比核数:小于核数算正常,持续大于核数说明过载;先 nproc 看核数再判断。htop 是更友好的升级版(彩色、树形、鼠标),但 top 是所有系统的保底工具。TIME+ 是累计 CPU 时间,不是存活时间——睡了很久的进程 TIME+ 可能很小。下一节讲进程状态机——读懂 STAT 列每个字母背后的完整生命周期,以及「僵尸进程」为什么危险。