top命令对Linux服务器而言具有非常重要的意义,它是Linux系统中常用的实时系统监控工具,能够动态地显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。通过top命令,系统管理员可以实时监控系统的运行状态,包括CPU使用率、内存占用、交换区使用情况、任务调度等信息,从而及时发现资源占用较高的进程或系统性能瓶颈,并进行相应的优化和调整。
下面是top命令的例子:

要读懂top命令的输出,可以从以下几个方面入手,接下来我们逐个拆解:
1 整体信息区

这部分为整体信息区,一共有五行,分别为:
1.1 系统运行时间和平均负载(第一行):
显示系统的运行时间、当前登录用户数和系统的平均负载。平均负载是指在特定时间间隔内,系统处于可运行状态和不可中断睡眠状态的平均进程数,这个值越低越好。
javascript
top - 18:29:30 up 50 days, 3:19, 4 users, load average: 0.20, 0.16, 0.08
详解:
内容 | 含义 |
---|---|
18:29:30 | 表示当前时间,二十四小时制 |
up 50 days, 3:19 | 系统已经运行的时间,目前这个是50天3小时19分钟 |
4 users | 当前登陆用户数 |
load average: 0.20, 0.16, 0.08 | 系统负载,即任务队列的平均长度。三个数值依次为 1分钟、5分钟、15分钟前到现在的平均值 |
其他三个都好理解,但是系统负载为什么要选择 **1分钟、5分钟、15分钟前到现在的平均值
**呢?如何根据这个参数观察系统的运行状况?
首先说为什么选择这三个时间段,1分钟平均负载 ,主要反映系统最近一分钟的负载情况,可以迅速捕捉到系统当前的负载变化。适合用于快速响应和诊断突发的负载问题。5分钟平均负载 ,提供了一个更长时间窗口的负载视图,有助于平滑掉一些短时间的波动。更适合用于评估系统负载的趋势,而不仅仅是瞬间的尖峰。15分钟平均负载,提供了最长的时间窗口,用于评估系统长期的负载状况。有助于识别系统是否处于持续的过载状态,或者是否正在从过载中恢复。
那么如何根据平均负载观察系统的运行状况:
1)比较平均负载与CPU核心数:
平均负载值应与系统的CPU核心数进行比较。例如,如果系统有4个CPU核心,那么一个合理的负载值应接近4.0。如果1分钟平均负载持续高于CPU核心数,表明系统正在处理过多的任务,可能需要优化或增加资源。
2)观察负载趋势:
通过比较1分钟、5分钟和15分钟的平均负载,可以观察负载的变化趋势。如果负载在逐渐下降,表明系统正在从过载中恢复。如果负载在持续上升,特别是15分钟平均负载也在上升,表明系统可能面临持续的过载问题。
3)结合其他指标:
- 平均负载应与其他系统指标(如CPU使用率、内存使用率、磁盘I/O等)一起分析。
- 例如,高负载可能伴随着高CPU使用率或磁盘I/O等待,这有助于诊断问题的根源。
总之,通过观察top
命令输出的平均负载,并结合其他系统指标和趋势分析,可以有效地评估系统的运行状况,并采取适当的措施来优化性能或应对潜在的过载问题。
1.2 任务(进程)信息(第二行):
显示当前系统中的任务总数,包括正在运行的、睡眠的、停止的、僵尸进程的数量。
javascript
Tasks: 148 total, 2 running, 146 sleeping, 0 stopped, 0 zombie
详解:
内容 | 含义 |
---|---|
Tasks: 148 total | 进程总数 |
2 running | 正在运行的进程数 |
146 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
什么是僵尸进程?
僵尸进程(Zombie Process)是操作系统中一个常见的概念,尤其在UNIX和Linux系统中。它指的是已经终止但仍然占用系统资源(主要是进程表中的条目)的进程状态。
产生原因:子进程正常或异常终止后,向父进程报告自己的退出状态。如果父进程没有及时处理这个退出状态(即没有调用wait()或waitpid()等函数),子进程就会进入僵尸状态。
影响:僵尸进程本身不消耗CPU资源,但占用系统内存(主要是进程表中的条目)。当系统中存在大量僵尸进程时,会浪费系统资源,可能导致系统性能下降。
解决方案:找到僵尸进程的父进程ID(PPID),并尝试结束该父进程。父进程结束后,操作系统通常会负责清理其子进程(包括僵尸进程)的资源。
1.3 CPU信息(第三行):
显示CPU的使用情况,包括用户态、系统态、空闲态等百分比。通过这些信息,可以了解CPU的利用率和瓶颈所在。
javascript
%Cpu(s): 1.7 us, 1.3 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
详解:
内容 | 含义 |
---|---|
1.7 us | 用户空间占用CPU百分比 |
1.3 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
97.0 id | 空闲CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
0.0 st | 用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间 |
1.4 内存和交换区信息(第四、五行):
显示内存的使用情况,包括总内存、已使用的内存、空闲内存、缓冲内存等。这有助于判断内存是否充足,是否存在内存泄漏等问题。
单位:MiB
javascript
MiB Mem : 1771.3 total, 106.4 free, 650.6 used, 1014.2 buff/cache
MiB Swap: 1025.0 total, 698.3 free, 326.7 used. 927.1 avail Mem
详解:
内容 | 含义 |
---|---|
1771.3 total | 物理内存总量 |
106.4 free | 空闲内存总量 |
650.6 used | 使用的物理内存总量 |
1014.2 buff/cache | 用作内核缓存的内存量 |
交互区:
内容 | 含义 |
---|---|
1025.0 total | 交换区总量 |
326.7 used | 使用的交换区总量 |
698.3 free | 空闲交换区总量 |
927.1 avail Mem | 缓冲的交换区总量 |
2 进程信息区
进程信息区显示了当前系统中正在运行的进程的详细信息,

通常包括以下几列:
PID:进程的标识符,每个进程都有一个唯一的PID。
USER:运行进程的用户名。
PR:进程的优先级。
NI:进程的优先级调整值,也称为Nice值。
VIRT:进程使用的虚拟内存大小。
RES:进程实际使用的物理内存大小。
SHR:进程共享的内存大小。
S:进程的状态,如运行(R)、睡眠(S)、停止(T)等。
%CPU:进程占用CPU的使用率。
%MEM:进程占用内存的使用率。
**TIME+:**进程的累计CPU时间。
COMMAND:进程的命令名称或路径。
3 交互操作
在top命令运行时,可以使用一些按键命令进行操作:
javascript
q:退出top命令。
h:显示帮助信息。
k:杀死一个进程,系统会提示输入进程ID以及发送给它的信号。
r:重新调整一个进程的优先级。
P:按CPU使用率排序。
M:按内存用量排序。
N:按PID排序。
T:按累计时间排序。
s:改变两次刷新之间的延迟时间。
f 或 F:从当前显示中添加或删除项目。
o 或 O:改变显示项目的顺序。
4 小总结
top命令默认会按照一定的时间间隔刷新显示,可以通过设置参数-d
来调整刷新频率。如果需要将top命令的输出保存到文件中,可以使用参数-b
以批处理模式运行。默认情况下,top命令可能会截断较长的命令行。如果需要显示完整的命令行,可以使用参数-c
。
综上所述,通过仔细分析top命令的输出信息,并结合交互操作,系统管理员可以全面了解Linux服务器的运行状态和进程资源占用情况,从而进行有效的系统监控和优化。