top 是什么
top 属于 procps-ng 套件,提供实时刷新的资源视图,默认按 CPU 占用排序、每 3 秒刷新一次。它同时给出三层信息:系统概要(load average、任务数、CPU 各状态占比、内存与交换分区)、进程列表(PID、用户、状态、CPU、内存、运行时间、命令)、以及一组交互命令(切换排序、筛选用户、看线程、杀进程、调优先级)。它是判断「卡在哪一层」最省事的入口,但不保存历史,只反映采样瞬间。
基本信息
| 适用平台 | Linux 全发行版(procps-ng 的 top);精简容器与 BusyBox 环境里的 top 功能受限,交互键与字段都不完整 |
|---|---|
| 命令语法 | top [选项] |
| 常用选项 | -b 批模式、-n 刷新次数、-d 刷新间隔、-p 只监控指定 PID、-u 只看指定用户、-o 指定排序字段、-H 显示线程、-c 显示完整命令行 |
| 交互键 | P 按 CPU 排序、M 按内存排序、1 展开每个核心、c 完整命令、k 杀进程、r 调 nice、u 按用户过滤、H 线程视图、W 保存配置、q 退出 |
| 权限要求 | 普通用户能看到进程列表,但其他用户的完整命令行与部分字段需要 root 才显示;k 与 r 操作受进程属主限制 |
典型使用场景
- 快速判断负载来源:先看 us 是否高,再看 wa 是否高,一分钟内定位是算力、IO 还是虚拟化抢占
- 单核热点分析:按 1 展开每个核心,确认是单线程瓶颈还是整体压力
- 内存排查:按 M 排序看 RES 常驻内存,结合 available 与 swap 判断是否已进入交换
- 抓取现场证据:top -b -d 1 -n 5 输出到文件,事后对比或提交给二线排查
- 定位 D 状态任务:load 高但 CPU 空闲时,在状态列里找 D(不可中断睡眠,通常是 IO 等待)
- 临时调整优先级:用 r 对非关键任务 renice,缓解关键服务被抢占
常用示例
常用示例
top -o %CPU # 按 CPU 排序启动
top -u www-data # 只看某个用户的进程
top -p 1234 -p 5678 # 只盯指定 PID
top -b -d 1 -n 5 > /tmp/top.log # 批模式连续采 5 次留证
top -H -b -n 1 | head -30 # 线程视图,定位具体线程
# 进入交互界面后:
# 1 展开每核 M 内存排序 c 完整命令 k 杀进程 r 调优先级 H 线程 W 保存配置CPU 行逐项读法
| 字段 | 含义 | 异常判断 |
|---|---|---|
| us | 用户态 CPU 时间占比,应用自身计算 | 持续接近 100% 说明应用吃满 CPU,先看谁在算 |
| sy | 内核态占比,系统调用与网络处理 | 偏高常见于高并发网络、频繁系统调用或驱动开销 |
| wa | 等待 IO 完成的比例,此时 CPU 实际空闲 | 持续超过 20% 说明磁盘是瓶颈,转查 iostat |
| hi / si | 硬中断与软中断占比 | 网络或磁盘中断风暴时明显升高 |
| st | 被虚拟化宿主机抢占的比例 | 云主机上偏高说明邻居或超卖影响性能 |
| id | 空闲比例 | id 很高但业务卡,瓶颈不在 CPU |
load average 的三个数分别是 1、5、15 分钟平均值,要与逻辑核心数(nproc)对比着看:单核机器 load 2 已经过载,16 核机器 load 8 仍有余量。Linux 的 load 还统计 D 状态(不可中断睡眠)任务,因此负载高不等于 CPU 忙,IO 阻塞同样推高负载。
top 显示的是自上次刷新以来的增量,短命的突发进程可能一闪而过;多线程进程按进程聚合时 %CPU 可能超过 100%(多核叠加),按 H 展开成线程后每个线程通常不超过 100%。要长期趋势与历史回溯,应该用监控系统或 sysstat 的 sar,top 本身不留历史。
在 top 里按 k 会直接给目标进程发信号(默认 SIGTERM),手滑选错行就杀错服务。杀之前先按 c 确认完整命令行与启动参数,必要时改用 ps 与 pgrep 精确匹配 PID 后再操作。