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 sshd

CPU 状态百分比

%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 使用率的指南。

任务区域列

ColumnDescription
PID进程 ID
USER进程的拥有者
PR内核分配的调度优先级
NINice 值(-20 = 最高优先级,19 = 最低)
VIRT进程映射的总虚拟内存
RES驻留集大小 — 当前使用的物理 RAM
SHR与其他进程共享的内存
S进程状态:R 运行,S 睡眠,D 不可中断,Z 僵尸
%CPU自上次刷新以来的 CPU 使用率
%MEM使用的物理 RAM 百分比
TIME+自进程启动以来消耗的总 CPU 时间
COMMAND进程名称或完整命令行(使用 c 切换)

常见交互式控制

在运行 top 时按这些键:

KeyAction
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 结合使用。

快速参考

CommandDescription
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。