top 是一个命令行实用工具,用于实时显示正在运行的进程和系统资源使用情况。它帮助您从单个交互式视图中检查 CPU 使用率、内存消耗、负载平均值以及进程活动。
本指南解释了如何使用 top 来监控系统并快速识别资源占用高的进程。
top 命令语法
top 命令的语法如下:
top [OPTIONS]不带参数运行 top 以打开交互式监控器:
top理解 top 输出
屏幕分为两个区域:
- 摘要区域 — 在标题行中显示的系统级指标
- 任务区域 — 列在标题下方的每个进程的指标
典型的 top 标题如下所示:
top - 14:32:01 up 3 days, 4:12, 2 users, load average: 0.45, 0.31, 0.28
Tasks: 213 total, 1 running, 212 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 95.3 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem: 15886.7 total, 8231.4 free, 4912.5 used, 2742.8 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 10374.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 www-data 20 0 123456 45678 9012 S 4.3 0.3 0:42.31 nginx
987 mysql 20 0 987654 321098 12345 S 1.7 2.0 3:12.04 mysqld
5678 root 20 0 65432 5678 3456 S 0.0 0.0 0:00.12 sshdCPU 状态百分比
%Cpu(s) 行将 CPU 时间分解为以下状态:
us— 运行用户空间(非内核)进程的时间sy— 运行内核进程的时间ni— 运行具有手动调整 nice 值的用户进程的时间id— 空闲时间wa— 等待 I/O 完成的时间hi— 处理硬件中断请求的时间si— 处理软件中断请求的时间st— 被 Hypervisor 从该虚拟机窃取的时间(在 VM 上相关)
高 wa 通常指向磁盘或网络 I/O 瓶颈。高 us 或 sy 指向 CPU 压力。有关内存详细信息,请参阅 free 命令。有关负载平均值上下文,请参阅 uptime。有关报告 CPU 使用率的其他工具,请参阅在 Linux 中检查 CPU 使用率的指南。
任务区域列
| Column | Description |
|---|---|
PID | 进程 ID |
USER | 进程的拥有者 |
PR | 内核分配的调度优先级 |
NI | Nice 值(-20 = 最高优先级,19 = 最低) |
VIRT | 进程映射的总虚拟内存 |
RES | 驻留集大小 — 当前使用的物理 RAM |
SHR | 与其他进程共享的内存 |
S | 进程状态:R 运行,S 睡眠,D 不可中断,Z 僵尸 |
%CPU | 自上次刷新以来的 CPU 使用率 |
%MEM | 使用的物理 RAM 百分比 |
TIME+ | 自进程启动以来消耗的总 CPU 时间 |
COMMAND | 进程名称或完整命令行(使用 c 切换) |
常见交互式控制
在运行 top 时按这些键:
| Key | Action |
|---|---|
q | 退出 top |
h | 显示帮助 |
k | 通过 PID 终止进程 |
r | 调整进程的优先级 |
P | 按 CPU 使用率排序 |
M | 按内存使用率排序 |
N | 按 PID 排序 |
T | 按运行时间排序 |
1 | 切换每 CPU 核心显示 |
c | 切换完整命令行 |
u | 按用户过滤 |
刷新间隔和批处理模式
要更改刷新间隔(秒),使用 -d:
top -d 2要在批处理模式(非交互式)下运行 top,请使用 -b。这对于脚本和日志很有用:
top -b -n 1要捕获多个快照:
top -b -n 5 -d 1 > top-snapshot.txt过滤和排序
使用用户过滤器启动 top:
top -u root要通过 PID 监控特定进程,请使用 -p:
top -p 1234传递逗号分隔的列表以同时监控多个 PID:
top -p 1234,5678要显示单独的线程而不是进程,请使用 -H:
top -H线程视图在分析多线程应用程序时很有用——每个线程都作为单独的行出现,具有自己的 CPU 和内存使用率。
在 top 内部,使用:
P按 CPU 排序M按内存排序u显示特定用户
对于更深入的进程过滤,将 top 与 ps、pgrep 和 kill 结合使用。
快速参考
| Command | Description |
|---|---|
top | 启动交互式进程监控器 |
top -d 2 | 每 2 秒刷新一次 |
top -u user | 仅显示特定用户的进程 |
top -p PID | 通过 PID 监控特定进程 |
top -H | 显示单独的线程 |
top -b -n 1 | 单个非交互式快照 |
top -b -n 5 -d 1 | 以 1 秒间隔收集 5 个快照 |
故障排除
top 未安装安装 procps 包(某些发行版为 procps-ng),然后再次运行 top。
显示刷新太快或太慢使用 -d 调整刷新率,例如 top -d 2。
无法终止或调整进程优先级您可能不是该进程的拥有者。使用 sudo 或以具有足够权限的用户身份运行。要在不使用 top 的情况下更改优先级,请参阅 nice 和 renice。
常见问题
top 和 htop 有什么区别?top 默认在大多数 Linux 系统上可用且轻量级。htop 提供更丰富的交互式 UI,具有颜色编码、鼠标支持和更易于导航,但需要单独安装。btop 命令更进一步,在进程列表旁边添加了磁盘和网络图表。
负载平均值是什么意思?负载平均值显示过去 1、5 和 15 分钟内可运行或不可中断任务的平均数量。高于 CPU 核心数量的值表示系统处于压力之下。有关更多详细信息,请参阅 uptime。
什么是僵尸进程?僵尸进程已完成执行,但由于父进程尚未读取其退出状态,其条目仍保留在进程表中。少量僵尸进程是无害的;增长的数量可能表明父应用程序存在错误。
VIRT、RES 和 SHR 是什么意思?VIRT 是进程保留的总虚拟地址空间。RES 是当前使用的实际物理 RAM。SHR 是与其它进程共享的 RES 部分(例如,共享库)。RES 减去 SHR 给出该进程独占使用的内存。
我可以将 top 输出保存到文件吗?是的。使用批处理模式,例如:top -b -n 1 > top.txt。