top命令输出详解

本文详细介绍Linux中的top命令,包括其输出格式、交互命令以及命令行选项等。通过本文,读者可以全面了解如何利用top命令进行系统监控。

详解Top命令 输出命令行选项及代码

Linux中的top命令显示系统上正在运行的进程。它是系统管理员最重要的工具之一。被广泛用于监视服务器的负载。在本篇中,我们会探索top命令的细节。top命令是一个交互命令。在运行top的时候还可以运行很多命令。我们也会探索这些命令。

  (译注:不同发行版的top命令在各种细节有不同,如果发现不同时,请读你的帮助手册和命令内的帮助。)

  1. Top 命令输出

  首先,让我们了解一下输出。top命令会显示系统的很多信息。我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出:   

  前几行水平显示了不同系统参数的概括,接下来是进程和它们在列中的属性。

  1.1 系统运行时间和平均负载:   

  top命令的顶部显示与uptime命令相似的输出。

  这些字段显示:

  当前时间

  系统已运行的时间

  当前登录用户的数量

  相应最近5、10和15分钟内的平均负载。

  可以使用'l'命令切换uptime的显示。

  1.2 任务:   

  第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示。

  1.3 CPU 状态: 

  下一行显示的是CPU状态。 这里显示了不同模式下的所占CPU时间的百分比。这些不同的CPU时间表示:

  us, user: 运行(未调整优先级的) 用户进程的CPU时间

  sy,system: 运行内核进程的CPU时间

  ni,niced:运行已调整优先级的用户进程的CPU时间

  wa,IO wait: 用于等待IO完成的CPU时间

  hi:处理硬件中断的CPU时间

  si: 处理软件中断的CPU时间

  st:这个虚拟机hypervisor偷去的CPU时间

  (译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

  可以使用't'命令切换显示。

  1.4 内存使用: 

  接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。

  物理内存显示如下:全部可用内存、已使用内存、空闲内存、缓冲内存。相似地:交换部分显示的是:全部、已使用、空闲和缓冲交换空间。

  内存显示可以用'm'命令切换。

  1.5 字段/列:  

  在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。

  默认上,top显示这些关于进程的属性:  PID

  进程ID,进程的唯一标识符  USER

  进程所有者的实际用户名。

  PR

  进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

  NI

  进程的nice值(优先级)。越小的值意味着越高的优先级。

  VIRT

  进程使用的虚拟内存。

  RES

  驻留内存大小。驻留内存是任务使用的非交换物理内存大小。

  SHR

  SHR是进程使用的共享内存

  S

  这个是进程的状态。它有以下不同的值:

  D - 不可中断的睡眠态。

  R – 运行态

  S – 睡眠态

  T – 被跟踪或已停止

  Z – 僵尸态

  %CPU

  自从上一次更新时到现在任务所使用的CPU时间百分比。

  %MEM

  进程使用的可用物理内存百分比。

  TIME+

  任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

  COMMAND

  运行进程所使用的命令。

  还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。

  2. 交互命令

  我们之前说过top是一个交互命令。上一节我们已经遇到了一些命令。这里我们会探索更多的命令。

  2.1 ‘h’: 帮助

  首先,我们可以用'h'或者'?'显示交互命令的帮助菜单。   

  2.2 ‘’ 或者 ‘’: 刷新显示

  top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。

  2.3 ‘A’: 切换交替显示模式

  这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口(译注:分别关注不同的字段):

  Def (默认字段组)

  Job (任务字段组)

  Mem (内存字段组)

  Usr (用户字段组)

  这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(译注:只有当前窗口才会接受你键盘交互命令)   

  我们可以用'a'和'w'在4个 窗口间切换。'a'移到后一个窗口,'w'移到前一个窗口。用'g'命令你可以输入一个数字来选择当前窗口。 

  2.4 ‘B’: 触发粗体显示

  一些重要信息会以加粗字体显示。这个命令可以切换粗体显示。   

  2.5 ‘d’ 或‘s’: 设置显示的刷新间隔

  当按下'd'或's'时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。 

  2.6 ‘l’、‘t’、‘m’: 切换负载、任务、内存信息的显示

  这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。   

  2.7 ‘f’: 字段管理

  用于选择你想要显示的字段。用'*'标记的是已选择的。 

  上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。

  按'<'移动已排序的字段到左边,'>'则移动到右边。

  2.8 ‘R’: 反向排序

  切换反向/常规排序。

  2.9 ‘c’: 触发命令

  切换是否显示进程启动时的完整路径和程序名。 

  2.10 ‘i’: 空闲任务

  切换显示空闲任务。 

  2.11 ‘V’: 树视图

  切换树视图。 

  2.12 ‘Z’: 改变配色

  按下'Z'向用户显示一个改变top命令的输出颜色的屏幕。可以为8个任务区域选择8种颜色。 

  下面显示的是4中颜色显示的top视图。 

  2.13 ‘z’: 切换彩色显示

  切换彩色,即打开或关闭彩色显示。

  2.14 ‘x’ 或者 ‘y’

  切换高亮信息:'x'将排序字段高亮显示(纵列);'y'将运行进程高亮显示(横行)。依赖于你的显示设置,你可能需要让输出彩色来看到这些高亮。 

  2.15 ‘u’: 特定用户的进程

  显示特定用户的进程。你会被提示输入用户名。空白将会显示全部用户。  

  2.16 ‘n’ 或 ‘#’: 任务的数量

  设置最大显示的任务数量   

  2.17 ‘k’: 结束任务

  top命令中最重要的一个命令之一。用于发送信号给任务(通常是结束任务)。 

  2.18 ‘r’: 重新设置优先级

  重新设置一个任务的调度优先级。

  3. 命令行选项

  这些命令行选项与上面讨论的命令大多相同。top的输出可以用命令交互操作,但是你也可以带参数运行top来设置你想要的效果。

  3.1 -b: 批处理模式

  -b选项以批处理模式启动top命令。当你想要在文件中保存输出时是很有用的。

  3.2 -c: 命令/程序名 触发

  如上面所讨论到的命令,这个选项会以上次记住的程序/命令显示的状态显示(是否显示完整路径)。

  3.3 -d: 设置延迟间隔

  设置top的显示间隔(以秒计)。比如。

  $ top -d 1

  将会以1秒的刷新间隔启动top。

  3.4 -i: 切换显示空闲进程

  这个选项设置top命令的上一次记住的相反的'i'状态。

  3.5 -n: 设置迭代数量

  用-n选项,你可以设置top退出前迭代的次数。

  $ top -n 3

  将会在刷新输出3次后退出。

  3.6 -p: 监控特定的PID

  你可以用-p选项监控指定的PID。PID的值为0将被作为top命令自身的PID。

  3.7 -u 或 -U: 用户名 或者 UID

<think>我们被要求详细解释top命令输出。根据引用[1][2][3][4],top命令输出分为两个主要部分:系统概览区域(前五行)和进程列表区域。下面将详细解释每一部分的含义。 ### 一、系统概览区域(前五行) #### 1. 第一行:系统运行概览 - **内容示例**:`top - 12:34:56 up 10 days, 3:45, 2 users, load average: 0.01, 0.02, 0.05` - **详细解释**: - `12:34:56`:当前系统时间。 - `up 10 days, 3:45`:系统已运行时间(10天3小时45分钟)。 - `2 users`:当前登录用户数。 - `load average`:系统负载平均值(1分钟、5分钟、15分钟),表示平均等待CPU的进程数[^1]。 #### 2. 第二行:进程统计 - **内容示例**:`Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie` - **详细解释**: - `total`:进程总数。 - `running`:正在运行的进程数。 - `sleeping`:睡眠状态的进程数(等待事件完成)。 - `stopped`:停止状态的进程数(如通过`SIGSTOP`暂停)。 - `zombie`:僵尸进程数(已结束但父进程未读取其退出状态)。 #### 3. 第三行:CPU使用情况 - **内容示例**:`%Cpu(s): 5.0 us, 3.0 sy, 0.0 ni, 92.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st` - **详细解释**: - `us`:用户空间进程占用CPU百分比(User)。 - `sy`:内核空间进程占用CPU百分比(System)。 - `ni`:调整过优先级的用户进程占用百分比(Nice)。 - `id`:空闲CPU百分比(Idle)。 - `wa`:等待I/O完成的CPU时间百分比(Wait I/O)。 - `hi`:硬件中断占用百分比(Hardware IRQ)。 - `si`:软件中断占用百分比(Software IRQ)。 - `st`:虚拟机被hypervisor偷取的时间百分比(Steal Time)[^2]。 #### 4. 第四行:内存使用 - **内容示例**:`MiB Mem : 3842.5 total, 154.3 free, 1123.4 used, 2564.8 buff/cache` - **详细解释**: - `total`:物理内存总量。 - `free`:空闲内存量。 - `used`:已使用内存量(注意:包含缓冲区和缓存)。 - `buff/cache`:缓冲区和缓存占用的内存量(可重用)。 #### 5. 第五行:交换空间使用 - **内容示例**:`MiB Swap: 2048.0 total, 2047.5 free, 0.5 used. 2467.0 avail Mem` - **详细解释**: - `total`:交换空间总量。 - `free`:空闲交换空间量。 - `used`:已使用交换空间量。 - `avail Mem`:可用内存估计值(无需使用交换空间的内存,Linux 3.14+)[^3]。 ### 二、进程列表区域 进程列表按列显示各进程详细信息,默认按CPU使用率降序排列。 | 列名 | 含义 | 说明 | |-----------|--------------------------------------------|----------------------------------------------------------------------| | `PID` | 进程ID | 唯一标识进程的整数。 | | `USER` | 进程所有者 | 运行该进程的用户名。 | | `PR` | 优先级(Priority) | 内核调度优先级,数值越小优先级越高[^4]。 | | `NI` | 谦让值(Nice) | 用户态优先级调整值(-20~19),负值表示更高优先级。 | | `VIRT` | 虚拟内存大小(Virtual Memory) | 进程使用的虚拟内存总量(KB),包括共享库和映射文件。 | | `RES` | 驻留内存大小(Resident Memory) | 进程使用的物理内存大小(KB),即实际占用内存。 | | `SHR` | 共享内存大小(Shared Memory) | 进程共享内存大小(KB),可被其他进程共享。 | | `S` | 进程状态(Status) | 状态包括:`R`(运行)、`S`(睡眠)、`Z`(僵尸)、`T`(停止)等。 | | `%CPU` | CPU使用率 | 进程自上次更新后占用的CPU时间百分比(多核下可能超过100%)。 | | `%MEM` | 内存使用率 | 进程占用的物理内存百分比(相对于总物理内存)。 | | `TIME+` | 累计CPU时间 | 进程自启动后累计使用的CPU时间(单位:1/100秒)。 | | `COMMAND` | 命令名 | 启动进程的命令或程序名称(可通过`c`键切换完整命令行)。 | ### 三、交互操作键 在`top`运行时,可通过快捷键调整显示: - `P`:按CPU使用率排序(默认)。 - `M`:按内存使用率排序。 - `T`:按累计CPU时间排序。 - `N`:按PID排序。 - `k`:终止指定进程(输入PID后发送信号)。 - `f`:自定义显示字段。 - `q`:退出`top`。 ### 四、注意事项 1. **刷新间隔**:默认5秒刷新一次,可用`-d`选项调整(如`top -d 1`表示1秒刷新)。 2. **批处理模式**:`top -b -n1 > top.log`可输出一次结果到文件。 3. **CPU百分比计算**:多核系统中,`%CPU`可能超过100%(如4核系统最大400%)。 §§相关问题§§ 1. 如何通过`top`命令监控特定进程的资源使用情况? 2. `top`命令中`load average`达到多少需要告警? 3. 僵尸进程产生的原因及解决方法? 4. 如何通过`top`命令识别内存泄漏? </think> ### `top` 命令输出详细解析 `top` 是 Linux 系统性能监控的核心工具,其实时展示系统资源使用情况和进程状态。输出分为**系统概览区**(前 5 行)和**进程列表区**两大部分: --- #### 一、系统概览区(关键系统指标) 1. **第一行:系统运行时间与负载** ```bash top - 14:30:25 up 15 days, 3:45, 2 users, load average: 0.01, 0.05, 0.10 ``` - `14:30:25`:当前系统时间 - `up 15 days, 3:45`:系统连续运行时间 - `2 users`:登录用户数 - `load average: 0.01, 0.05, 0.10`:系统负载(1分钟/5分钟/15分钟平均值)。**负载 > CPU 核心数表示过载**。例如 4 核 CPU 负载 >4 需警惕[^1]。 2. **第二行:进程统计** ```bash Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie ``` - `total`:进程总数 - `running`:正在运行的进程数 - `sleeping`:休眠进程数(等待 I/O 或事件) - `zombie`:僵尸进程数(父进程未回收的已终止进程)**长期存在需排查**[^4]。 3. **第三行:CPU 使用率**(**核心指标**) ```bash %Cpu(s): 12.3 us, 6.2 sy, 0.0 ni, 81.2 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st ``` - `us`:用户空间程序占用(如应用程序) - `sy`:内核空间占用(如系统调用) - `id`:空闲 CPU 百分比 - `wa`:等待 I/O 的 CPU 时间(**>5% 可能存储瓶颈**) - `st`:虚拟机被 Hypervisor 占用的时间(虚拟化环境特有)[^2]。 4. **第四行:物理内存使用** ```bash KiB Mem : 7.6Gi total, 1.2Gi free, 4.3Gi used, 2.1Gi buff/cache ``` - `total`:总内存 - `free`:完全未使用的内存 - `used`:已用内存(含缓存) - `buff/cache`:缓冲区和缓存(可被快速回收) **实际可用内存 ≈ free + buff/cache**。 5. **第五行:交换空间(Swap)** ```bash KiB Swap: 2.0Gi total, 1.8Gi free, 0.2Gi used. 2.5Gi avail Mem ``` - `used`:Swap 使用量(**>0 表示物理内存不足**) - `avail Mem`:无需交换即可用的内存估计值(Linux 4.3+)。 --- #### 二、进程列表区(动态排序) 默认按 CPU 使用率降序排列,关键列含义: | 列名 | 含义 | 说明 | |------------|-------------------------------|----------------------------------------------------------------------| | `PID` | 进程 ID | 唯一标识符 | | `USER` | 进程所有者 | 运行该进程的用户账户 | | `PR` | 优先级 (Priority) | 内核调度优先级(值越小优先级越高) | | `NI` | Nice 值 | 用户态优先级(-20 最高 ~ 19 最低) | | `VIRT` | 虚拟内存 (Virtual Memory) | 进程占用的总虚拟内存(含共享库、映射文件等) | | `RES` | 常驻内存 (Resident Memory) | **实际物理内存占用(关键监控指标)** | | `SHR` | 共享内存 (Shared Memory) | 可被其他进程共享的内存 | | `S` | 进程状态 (Status) | R=运行, S=睡眠, D=不可中断睡眠, Z=僵尸, T=停止 | | `%CPU` | CPU 使用率 | 进程占用的 CPU 时间百分比(多核可超 100%) | | `%MEM` | 内存使用率 | 进程物理内存占总内存的百分比 | | `TIME+` | 累计 CPU 时间 | 进程使用的总 CPU 时间(格式: 分:秒.毫秒) | | `COMMAND` | 命令名称 | 启动进程的命令(按 `c` 键切換完整命令行) | --- #### 三、交互式操作键(运行时使用) - **排序控制**: `P`(按 CPU 使用率)、`M`(按内存使用)、`T`(按运行时间) - **进程操作**: `k`(终止进程)、`r`(调整优先级)、`H`(显示线程) - **视图调整**: `1`(展开 CPU 核心详情)、`f`(自定义显示列)、`z`(颜色切换) --- #### 四、典型问题诊断示例 1. **CPU 瓶颈**: - `%CPU` 持续 > 80% 且 `load average` > CPU 核心数 → 优化代码或扩容 - `wa` 值过高 → 检查磁盘 I/O 性能[^2] 2. **内存泄漏**: - 某个进程的 `RES` 持续增长且 `%MEM` 居高不下 → 重点排查 - `Swap used` > 0 → 物理内存不足需扩容 3. **僵尸进程**: - `S` 列显示 `Z` → 用 `kill -9 PID` 终止父进程回收资源[^4] > 可通过批处理模式保存快照:`top -bn1 > system_snapshot.txt`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值