怎样读懂top命令?

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服务器的运行状态和进程资源占用情况,从而进行有效的系统监控和优化。

欢迎关注我~

相关推荐
独行soc5 分钟前
2025年渗透测试面试题总结-某战队红队实习面经(附回答)(题目+回答)
linux·运维·服务器·学习·面试·职场和发展·渗透测试
Jia ming1 小时前
【奔跑吧!Linux 内核(第二版)】第1章:Linux 系统基础知识
linux·内核·linux内核
JH30731 小时前
【SpringBoot】SpringBoot中使用AOP实现日志记录功能
java·spring boot·后端
anqi272 小时前
在sheel中运行Spark
大数据·开发语言·分布式·后端·spark
程序员小刚2 小时前
基于SpringBoot + Vue 的作业管理系统
vue.js·spring boot·后端
海尔辛3 小时前
学习黑客 linux 提权
linux·网络·学习
FBI HackerHarry浩3 小时前
Linux云计算训练营笔记day02(Linux、计算机网络、进制)
linux·运维·网络·笔记·计算机网络·进制
问道飞鱼3 小时前
【Springboot知识】Springboot计划任务Schedule详解
java·spring boot·后端·schedule
小馬佩德罗3 小时前
Linux/AndroidOS中进程间的通信&线程间的同步 - 内存映射
linux·mmap
AirDroid_cn4 小时前
iPhone或iPad想要远程投屏到Linux系统电脑,要怎么办?
linux·iphone·ipad·手机投屏·无线投屏·远程投屏