面试经验篇 | 你了解top命令输出的内容吗

前言

作为一名运维工程师,我们应该对服务器性能的相关指标要做到了然于心

俗话说:“知己知彼,百战百胜”

只有对服务器性能的相关指标很熟悉,才能在服务器出现性能问题的时候快速找出问题所在,对于运维人员来讲,其能力主要体现在“找到问题”,即定位问题上,而不是“解决问题”。因为找出问题的难度往往比解决问题要高。

当服务器出现性能问题的时候,比如说:

  • 像在双十一这种流量高峰期,服务器 CPU 使用率过高报警,你登录 Linux 上去 top 完之后,却不知道怎么进一步定位,到底是系统 CPU 资源太少,还是程序并发部分写的有问题?
  • 当发现系统负载过高告警的时候,到底是什么原因导致系统负载过高?

这些问题这些场景,在实际生产环境中是很容易碰到的,而且其复杂度往往并不低

那么,今天我们来讲一个很常用的系统性能查看工具——top,同时来简单聊一下 top 工具输出的内容分别是什么。

在面试过程中,让你准确说出 top 命令输出的各个内容也是面试官特别喜欢问的一个问题,因为这往往能反映出你的对系统性能的了解程度

我们先在服务器里面运行 top 命令

img

看到这张图片,你是不是感觉到头皮发麻,不知道从哪里下手比较好。我第一次看的时候,差点没把我心态搞崩

我们可以这样,将 top 输出来的内容分为两个部分,如下图:

img

既然分成了两部分之后,我们就先从第一部分开始讲起

Part 1

在第一部分中,显示的是系统的整体使用情况

我们其实可以将它分成5行

img

我们先来看第一行:

16:41:16 up 27 min,  5 users,  load average: 0.00, 0.01, 0.05

从左到右依次是

  • 16:41:16 up 27 min:系统当前时间和系统运行时间(开机时间)
  • 5 users:登录到这台服务器的终端数,或者说有多少个用户登录到这台服务器上
  • load average: 0.00, 0.01, 0.05:过去1分钟、5分钟、15分钟内的平均负载

至于什么是平均负载,在我的《干货篇 | 平均负载和CPU使用率你还在傻傻分不清楚吗(含案例)》这篇文章中以及提到过,感兴趣的小伙伴可以看一下

接下来到第二行:

Tasks: 110 total,   2 running, 108 sleeping,   0 stopped,   0 zombie

这一行显示的是系统的相关进程信息

  • 110 total:进程总数。这里表示系统当前一共有110个进程
  • 2 running:正在运行的进程数。这里表示有2个正在运行的进程数
  • 108 sleeping:睡眠的进程数。有108个
  • 0 stopped:停止的进程数。
  • 0 zombie:僵尸进程数

第三行:

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

在这一行里,包含着跟CPU使用率相关的各种指标(当有多个CPU时,其内容可能不止一行),我们一一来看一下

  • %Cpu(s):表示占CPU总时间的百分比
  • us:user。代表处在用户态的CPU时间(不包括下面的nice时间,但包括了guest时间)
  • sy:sys。代表处在内核态的CPU时间
  • ni:nice。代表低优先级进程处在用户态的CPU时间,也就是说改变过nice值的进程的CPU时间
  • id:idle。代表空闲时间(不包括iowait)
  • wa:iowait。代表等待I/O的CPU时间
  • hi:irq。代表处理硬中断的CPU时间
  • si:softirq。代表处理软中断的CPU时间
  • st:steal。代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间

第四行:

KiB Mem :   995896 total,   603328 free,   151460 used,   241108 buff/cache

在这一行里,显示的是系统的物理内存使用情况,默认以字节为单位

  • total:表示总内存大小
  • free:表示未使用内存大小
  • used:表示已使用内存大小
  • buff/cache:表示缓存和缓冲区的大小

对于buff/cache我来简单提一点:**Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。**后面我会专门写一篇文章来介绍

第五行:

KiB Swap:  2097148 total,  2097148 free,  0 used.   661432 avail Mem

在这一行里,显示的是系统的交换分区使用情况。

  • KiB Swap:交换分区使用情况
  • total:总量
  • free:空闲的交换分区量
  • used:已被使用的交换分区量
  • avail Mem:可用于进程下一次分配的物理内存量

看到这里,有小伙伴可能会想问,什么是交换分区?

交换分区:

  • 缩写为 swap。
  • swap通过将硬盘空间当成内存来使用,把系统的可用内存变大了
  • 可以把进程暂时不用的数据存储到磁盘中(这个过程为换出),当进程要访问这些数据时,再从磁盘读取这些数据到内存中(这个过程称为换入)。

至此,我们第一部分的内容就已经介绍完了

Part 2

接下来,就到我们划分的第二部分的内容了,在这一部分里面都是各个进程的一些资源使用情况

img

我们只需要看第一行,也就是背景色是白色那一行

我们来看一下它们所代表的的含义

PID(Process ID)进程id号
USER(User Name)进程所有者的用户名
PR(Priority)进程优先级
NI(Nice Value)进程的Nice值,负值表示高优先级;正值表示低优先级
VIRT(Virtual Image )进程虚拟内存大小(只要是进程申请过的内存,即便还没有真正分配物理内存也会计算在内)单位为kb
RES(Resident size)进程实际使用的物理内存大小(不包括swap和共享内存)单位kb
SHR(Shared Mem Size)共享内存大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。单位kb
S(Status)表示进程的状态
%CPU进程的CPU时间占用CPU总时间的百分比
%MEM进程使用的物理内存占系统总内存的百分比
TIME+进程使用的CPU时间总计。单位1/100秒
COMMAND命令名

关于上面表格里面写的进程的状态,我在这里简要概括一下关于进程的几种状态

  • R(Running 或 Runnable):可执行状态。表示进程处在CPU的就绪队列中(就绪态或者运行态)
  • D(Disk Sleep):不可中断睡眠状态。这时候进程一般在跟硬件交互,并且在交互的过程中不允许被其他进程打断中断
  • Z(Zombie):僵尸进程。表示该进程已经结束了,但是其父进程没有回收它的资源(比如进程的描述符、PID等)
  • S:可中断睡眠状态。表示进程因等待某个事件而被系统挂起,当进程等待的事件发生时,就会被唤醒并进入R状态
  • T(Stopped或Traced):表示进程处于暂停或者跟踪状态
  • X:进程已经消亡
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼Linux运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值