个人博客

FOGBeta

Linux中top详解

2025-08-29

一、什么是 top?

top 是一个动态、实时的系统监控工具。它提供了一个不断更新的命令行仪表盘,显示系统摘要信息以及当前正在运行的进程列表,并按 CPU 使用率排序(默认情况下)。它是快速了解系统负载和定位资源消耗大户的首选工具。

二、启动与退出

启动: 在终端中直接输入命令:

top
  • 退出: 按下键盘上的 q (quit) 键即可。


三、top 界面详解

运行 top 后,屏幕会分为两部分:上部是系统摘要信息下部是进程列表

1. 顶部系统摘要信息 (System Summary)

第一行:系统概览

top - 18:20:30 up 10 days,  1:45,  1 user,  load average: 0.05, 0.10, 0.15
  • 18:20:30: 当前系统时间。

  • up 10 days, 1:45: 系统已运行时间。表示系统连续运行了10天1小时45分钟。

  • 1 user: 当前登录到系统的用户数量。

  • load average: 0.05, 0.10, 0.15系统平均负载,这是非常重要的指标。它显示的是过去1分钟、5分钟和15分钟的系统平均负载。对于单核CPU,1.00表示完全满负荷。如果有4个核心,则满负荷状态是4.00。

第二行:任务(进程)

Tasks: 200 total,   1 running, 199 sleeping,   0 stopped,   0 zombie
  • total: 当前运行的总进程数。

  • running: 正在运行或准备运行的进程数。

  • sleeping: 处于睡眠状态的进程数(等待某个事件发生)。

  • stopped: 被停止的进程数(例如通过 Ctrl+Z)。

  • zombie僵尸进程数。如果这个数字不为0,表示有子进程在结束后其父进程没有正确地回收它。这是需要关注的异常情况。

第三行:CPU 使用率

%Cpu(s):  1.5 us,  0.5 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

这是理解系统压力的核心。这些值表示CPU时间在各种状态下的百分比:

  • us (user): 运行普通用户进程所花费的CPU时间。

  • sy (system): 运行系统内核进程所花费的CPU时间。

  • ni (nice): 运行被调整过优先级(nice)的用户进程所花费的时间。

  • id (idle): CPU空闲时间百分比。这个值越高,说明CPU越空闲。

  • wa (I/O wait): CPU等待I/O操作(如磁盘、网络)完成的时间这个值如果持续很高,通常是磁盘或网络成为瓶颈的标志

  • hi (hardware interrupts): 处理硬件中断所花费的时间。

  • si (software interrupts): 处理软件中断所花费的时间。

  • st (steal time): 在虚拟化环境中,被宿主机“偷走”的时间。如果你的虚拟机(VPS)这个值很高,说明宿主机资源紧张。

第四、五行:物理内存 (RAM) 和交换分区 (Swap) 使用情况

MiB Mem :   7853.4 total,    102.4 free,    (总内存, 完全空闲的内存)
           5232.1 used,    (已使用的内存)
           2518.9 buff/cache (被用作缓存和缓冲的内存)
MiB Swap:   2048.0 total,    (交换分区总大小)
           1500.0 free,     (交换分区剩余)
            548.0 used.     (已使用的交换分区)
  • 关键理解: Linux 会充分利用空闲的内存来缓存(cache)和缓冲(buffer)磁盘数据,以提升性能。因此,free 内存很少是正常现象,不代表内存不足。真正需要关注的是 usedbuff/cache

  • 如果 Swapused 值很高,说明物理内存不足,系统正在频繁地使用硬盘作为虚拟内存,这会严重降低系统性能

2. 下部进程列表

这部分列出了当前的所有进程,默认按 CPU 使用率 (%CPU) 降序排列。

  • PID: 进程ID。

  • USER: 进程所有者的用户名。

  • PR: 进程优先级。

  • NI: Nice值。负值表示高优先级,正值表示低优先级。

  • VIRT: 进程使用的虚拟内存总量。

  • RES进程使用的、未被换出的物理内存(单位通常是KB或MB)。这是你最应该关注的内存指标。

  • SHR: 共享内存大小。

  • S: 进程状态(R=运行, S=睡眠, Z=僵尸)。

  • %CPU: 进程自上次更新以来使用的CPU时间百分比。

  • %MEM: 进程使用的物理内存占系统总物理内存的百分比。

  • TIME+: 进程使用的总CPU时间。

  • COMMAND: 启动此进程的命令名称。


四、top 的常用交互命令

top 运行时,按下单个字母键可以执行各种操作(这些操作不会在屏幕上显示)。

最重要的排序命令

  • P (大写): 默认模式,按 CPU 使用率 %CPU 排序

  • M (大写): 按内存使用率 %MEM 排序。这是找出哪个进程占用内存最多的最快方法。

  • T (大写): 按 TIME+(CPU 时间)排序。

  • N (大写): 按 PID(进程ID)排序。

其他实用命令

  • k终止一个进程。输入后,会提示你输入要结束的进程的 PID,然后提示输入信号(默认为15,SIGTERM;输入9是强制杀死 SIGKILL)。

  • r: renice一个进程(改变进程的优先级)。输入PID,然后输入新的Nice值(-20到19)。

  • z: 切换是否显示彩色。

  • 1 (数字1): 展开/折叠显示每个CPU核心的单独使用情况,而不是一个总体摘要。

  • u: 然后输入用户名,可以只显示属于某个用户的进程

  • Shift + f: 进入字段管理界面,可以用方向键选择要显示或排序的列,按 空格 键选择是否显示(标有*的为显示),按 s 键选择排序的列,然后按 q 退出该界面。

  • Shift + h: 切换是否显示线程(Threads)。按下后,Tasks 行会变成 Threads 行。

  • ?h: 显示帮助画面。


五、实战技巧:如何快速找出问题?

  1. 系统卡顿,怀疑CPU问题

    • 打开 top,看第一行的 load average 和第三行的 %id (idle)。如果负载高且空闲率低,再看进程列表,按 P 排序,排在第一位的进程就是元凶。

  2. 系统卡顿,怀疑内存不足

    • 打开 top,看第四、五行。如果 free 内存极少且 Swapused 很高,说明内存不足。按 M 键按内存排序,查看是哪个进程占用了最多的内存。

  3. 程序无响应,想强制关闭它

    • 打开 top,按 MP 找到该进程,记下它的 PID

    • 按下 k 键,输入那个 PID,然后回车,再输入 9 再回车,即可强制结束它。