阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux命令top的宝藏知识

36次阅读
没有评论

共计 4492 个字符,预计需要花费 12 分钟才能阅读完成。

导读 top 命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程、线程和系统参数的信息。
top 命令输出内容详细剖析

首先我们先看一下 top 命令的输出结果:

Linux 命令 top 的宝藏知识

我们现在一一分析这些字段的含义:

第一行
  • 12:53:04 表示当前时间,也就是当前真实的时间。
  • up 157 days 13:35,表示这个系统从启动到现在的时间,上图显示的含义就是这个系统从 157 天 13 个小时 35 分钟以前就启动了。
  • 5 users 表示当前在使用这个机器的用户数量。
  • load average: 0.00, 0.00, 0.00,这个值表示系统过去 1 分钟,5 分钟,15 分钟的系统负载。现在有一个问题就是,什么是这里谈到的系统负载。所谓系统负载,我们拿一分钟来举例子,我们将一分钟一个 CPU 时间定义为 t,在这一分钟之内总共消耗的 CPU 时间为 c,那么在这一分钟之内的负载为

    ,需要注意的是这个消耗的 CPU 时间 c 是可以大于 t 的,因为一个程序可能使用了多个 CPU(并发程序,也可能是多个进程同时在使用不同的 CPU)。

  • Linux 命令 top 的宝藏知识

    第二行
  • 第二行主要表示当前系统当中任务的相关情况,所谓任务就是当前系统当中一共有多少个进程。
  • 652 totoal,这个表示当前系统当中一共有 652 个进程。
  • 1 runnung,表示有一个进程正在执行。
  • 651 sleeping,表示有 651 个进程处于睡眠状态,也就是不需要使用 CPU 的状态。
  • 0 stoped,表示有 0 个进程处于 stopped 状态,这个状态就是被停下来的进程,比如说通过 ctrl+ z 让一个进程停下来,你可以通过给这个进程发送一个信号 SIGCONT 让这个进程恢复执行,linux 当中进程的状态变换如下所示:
  • Linux 命令 top 的宝藏知识

  • 0 zombie,这个就表示僵尸进程的个数,这里是 0 个僵尸进程,所谓僵尸进程就是一个进程执行完成了,对于 C 程序来说你可以理解为你的 main 函数执行完成了(这个不够准确,其实 main 函数执行完成之后还会有其他函数需要执行,但是这里你可以大致这么理解),如果这个时候(函数执行完成),这个进程的父进程却没有接受子进程发送给他的信号(子进程在执行完成之后会给父进程发送信号,父进程需要通过 wait 等系统调用去接受这个信号),那么子进程就处于 zombie 状态,处于这个状态的进程就需要父进程接受它发送的信号,然后子进程的系统资源就可以被回收了,然后子进程会彻底消亡。

    我们现在花一点时间来谈一谈 linux 当中的进程状态。

  • Ready,当进程被创建完成之后他就处于 Ready 状态,在这个状态下的进程只差 CPU 了,也就是说,他现在只需要被操作系统调度获取 CPU 然后他就可以执行了。
  • Running,当进程从 Ready 状态获取 CPU 的执行权的时候,进程就处于 Running 状态,这个状态表示进程正在执行。
  • traced,这个状态主要是一个进程处于调试状态,这个状态需要调试的进程给这个被调试的进程发送信号,然后和这个进程才可以继续执行。
  • Zombie,当进程执行完成之后,父进程接受子进程发送的信号之前,进程就处于这个状态。
  • Suspended,这个状态表示进程被挂起,当进程请求 IO 的时候,需要阻塞等待 IO 请求完成,这个时候的进程状态就是 Suspened 状态。
  • 第三行

    这一行主要是各种时间所占的百分比的统计,这个数据的统计时间区间是,从本次刷新到上一次刷新之间,实在这个区间统计的数据

  • us,运行没有指定优先级的用户进程所消耗的 CPU 时间所占百分比,默认的终端执行的程序都是没有指定优先级的,我们可以使用 nice 这个命令来改变程序执行的优先级:sudo nice -n -10 ./time。
  • sy,运行内核进程所消耗的 CPU 时间所占的百分比。
  • ni,运行指定了修改过优先级之后的用户进程所占的 CPU 时间百分比。这里可以结合 PR 和 NI 两个字段进行分析,我们现在执行 sudo nice -n 10 ./a.out 命令,在./a.out 当中我启动了 10 个死循环的线程,我们来看一下它的 top 输出结果:
  • Linux 命令 top 的宝藏知识

    从上面的结果来看我们通过 nice 命令修改来进程优先级,但是需要主要的是一个进程的 PR 值越大他的优先级越低,NI 值越大优先级越低,也就是说我们上面实际上是降低了进程执行的优先级了,但是我们可以看到 ni 的值是发生变化了的,这也印证了上面我们所谈到的 ni 值发生变化的过程。我们再来看一下没有设置优先级的结果,直接执行 sudo ./a.out:

    Linux 命令 top 的宝藏知识

    但是在实验测试的过程当中发现了一个奇怪的问题,但我们提升进程的优先级(提升优先级需要管理员权限)的时候 ni 的值没有发生变化,因此上面所谈到的 ni 的变化应该只适用于普通用户的进程(因为降低优先级不需要管理员权限)。

    Linux 命令 top 的宝藏知识

  • id,idle 进程执行所占的 CPU 时间百分比,当系统当中没有足够的进程让 CPU 执行的时候,idle 进程会被调度到 CPU 上进行执行,这个 idle 进程是为了让操作系统能够良好的执行起来所设置的,idle 进程主要执行 HLT 指令,这个指令主要是让 CPU 节能,不需要 CPU 满负荷运转,因为这个时候没有具体的进程需要执行,这个百分比越大说明系统负载越轻,CPU 不繁忙。
  • wa,这个很好解释,等待 IO 的时间。
  • hi,处理硬件中断所消耗的时间。
  • si,处理软件中断所消耗的时间
  • st,这个时间稍微有点复杂,IBM 解释原文为:
  • Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.

    这个主要是虚拟机的虚拟 CPU 等待真实物理 CPU 的时间,可以大致认为是 Ready 状态到 Running 状态的等待时间,如果这个值越大说明虚拟机运行状态越不好,因为它等待真实 CPU 的时间很长。

    第四行

    这一行表示的是物理内存的信息,单位是 KiB。

  • total, 表示一共有多少内存,也就是物理内存大小。
  • free, 表示还有多少物理内存没有使用。
  • used, 表示使用了多少物理内存。
  • buff/cache, 表示用于用于缓存的物理内存的大小。
  • 第五行

    这一行主要表示的是对换区的数据,所谓对换区就是当操作系统发现内存满了之后,操作系统会选择部分不常使用的页面将它放到磁盘当中当需要使用的时候再将这部分数据从磁盘当中读取出来。

  • total, 表示对换区的总大小。
  • free, 表示对换区当中还有多少空间没有使用。
  • used, 表示对换区当中有多少空间被使用了。
  • 最后一项 avail Mem 是一个可用于启动新程序的内存大小的估计值。
  • 表头内容含义

    PID,表示进程号,就是每个进程的 ID。

  • USER,就是用户的名称。
  • PR,优先级值。
  • NI,nice 值,通过程序给进程设置的。
  • VIRT,进程使用的虚拟内存的大小,单位是 KiB。
  • RES,常驻内存的内存大小,单位是 KiB。
  • SHR,共享内存的大小,单位是 KiB。
  • S,表示进程的状态,有一下几个状态。
    1. D,不能够中断的睡眠状态。
      R,表示程序正在 CPU 上执行。
      S,表示进程正在睡眠。
      T,进程被信号停止执行。
      t,表示进程正在被调试器追踪,调试器将这个进程停了下来。
      Z,zombie 表示是一个僵尸进程。
  • %CPU,上次一刷新之前对应的进程对 CPU 的占有率,这个值是可以突破 100% 的,因为一个进程可以有多个进程,比如下面这样,我们开启 10 个线程进行死循环:
  • #include 
     
     
    void* func(void * args) {while (1)
      {/* code */}
      
    }
     
    int main() {
      #define num_threads 10
      pthread_t t[num_threads];
      for(int i = 0; i 
    

    执行上面的程序之后,top 的输出结果如下所示:

    Linux 命令 top 的宝藏知识

    从上面的这个结果我们可以知道 CPU 的占有率是可以超过 %100 的,这个值的计算主要是在刷新之间内一个进程消耗的 CPU 时间和在这段时间内一个 CPU 能够产生的 CPU 时间的比值。

  • %MEM,这个主要是进程使用的内存占用实际的可用的物理内存的比例。
  • TIME+,这个表示自从进程启动以来累计消耗的 CPU 时间。
  • COMMAND,这个表示启动进程的时候执行的命令。
  • top 命令交互操作
  • c,详细显示命令行的内容,你在交互模式下直接按下键盘上的 c 即可。
  • Linux 命令 top 的宝藏知识

  • o,在交互模式下先按下键盘上的 o,然后就可以输入过滤条件,在这里掩饰的是 COMMAND=a.out 的进程:
  • Linux 命令 top 的宝藏知识

  • k,shell 给我们提供了一个非常方便的操作我们可以在交互模式下选择我们想要杀死的进程,比如在下图当中我们杀死进程 135020。
  • 我们先在交互模式下先按下键盘上的 k,然后输入进程号,然后输入回车,再输入想发送的信号类型。

    输入进程号

    Linux 命令 top 的宝藏知识

    再输入想要发送的信号:

    Linux 命令 top 的宝藏知识

    这里可以输入代表信号的数字,也可以输入代表信号的名字,不同的信号的名字和代表输入如下:

    1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
     6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
    11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
    16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
    21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
    26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
    31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
    38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
    43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
    48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
    53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
    58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
    63) SIGRTMAX-1	64) SIGRTMAX
  • u,通过用户过滤,在交互模式下按下键盘上的 u 键,然后就可以输入你想看那个用户的进程,输入对应的用户名称即可,比如说看 root 用户的进程:
  • Linux 命令 top 的宝藏知识

    然后我们就只能够看到 root 用户的进程了。

    Linux 命令 top 的宝藏知识

  • h,查看帮助信息:
  • Linux 命令 top 的宝藏知识

  • i,过滤掉 CPU 利用率很低的进程,很多时候我们在进行系统分析的时候需要去判断那个进程 CPU 占有率高,因此 i 是一个非常有效的方式过滤掉干扰进程。
  • 以上就是本篇文章的所有内容了

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥说事-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计4492字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中