果冻想
认真玩技术的地方

Linux top命令详解

前言

上一篇《Linux vmstat命令详解》中详细的总结了vmstat命令,对于vmstat命令来说,还有一个姊妹命令toptop命令在我们的日常运维中的出镜率应该是相当高的,它使用简单,输出的内容丰富,信息简单明了,是众多运维工作者工具库里的一大法宝,可见top命令的重要性了,这篇文章我将对top命令进行详细的总结。

命令详解

top显示系统当前的进程和其它状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序。

top常用命令格式如下:

top [参数]

命令参数说明如下:

-b 批处理
-c 显示完整的启动命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-H 线程模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

下面就对我们常用的使用方式进行详细的总结。

使用实例

输入命令:top
输出结果:

top - 11:29:59 up 45 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  87 total,   3 running,  84 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016476 total,   522952 free,   276456 used,   217068 buff/cache
KiB Swap:   839676 total,   839676 free,        0 used.   573936 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND       
 2695 jelly     20   0  157608   2164   1512 R  1.0  0.2   0:00.06 top           
 1603 mysql     20   0 1125372 195108  11132 S  0.3 19.2   0:01.98 mysqld         
    1 root      20   0  128104   6708   3956 S  0.0  0.7   0:01.92 systemd       
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd       
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.13 ksoftirqd/0   
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.03 kworker/u2:0   
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0   

输出内容详解:

  • 第一行;这行信息与uptime输出的信息一样;
    • 11:35:56:系统当前时间;
    • up 51 min:系统已运行时间;
    • 1 user:当前连接系统的终端数;
    • load average: 0.00, 0.01, 0.05:系统负载;后面的三个数分别是1分钟、5分钟、15分钟的负载情况;如果平均负载值大于0.7*CPU内核数,就需要引起关注;
  • 第二行;表示进程数信息;
    • 87 total:总进程数;
    • 3 running:正在运行的进程数;
    • 84 sleeping:正在睡眠的进程数;
    • 0 stopped:停止的进程数;
    • 0 zombie:僵尸进程数;
  • 第三行;表示CPU状态信息;这里显示数据是所有CPU的平均值,如果想看每一个CPU的处理情况,按1即可;折叠,再次按1;
    • 0.7 us:用户空间占用CPU百分比;
    • 0.3 sy:内核空间占用CPU百分比;
    • 0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比;
    • 99.0 id:CPU空闲率;
    • 0.0 wa:等待IO的CPU时间百分比;
    • 0.0 hi:硬中断(Hardware IRQ)占用CPU的百分比;
    • 0.0 si:软中断(Software Interrupts)占用CPU的百分比;
    • 0.0 st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的);
  • 第四行;物理内存使用信息;
    • 1016476 total:物理内存总量;
    • 522952 free:使用的物理内存总量;
    • 276456 used:空闲内存总量;
    • 217068 buff/cache:用作内核缓冲/缓存的内存量;
  • 第五行;交换空间使用信息;我们要时刻监控交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了;
    • 839676 total:交换区总量;
    • 839676 free:交换区空闲量;
    • 0 used:交换区使用量;
    • 573936 avail Mem:可用于进程下一次分配的物理内存数量;
  • 第六行;空行;
  • 第七行;各个进程的状态信息;
    • PID:进程id;
    • USER:进程所有者;
    • PR:进程优先级;
    • NI:nice值;越小优先级越高,最小-20,最大20(用户设置最大19);
    • VIRT:进程使用的虚拟内存总量,单位kb;VIRT=SWAP+RES;
    • RES:进程使用的、未被换出的物理内存大小,单位kb;RES=CODE+DATA;
    • SHR:共享内存大小,单位kb;
    • S:进程状态;D=不可中断的睡眠状态、R=运行、S=睡眠、T=跟踪/停止、Z=僵尸进程;
    • %CPU:上次更新到现在的CPU时间占用百分比;
    • %MEM:进程使用的物理内存百分比;
    • TIME+:进程使用的CPU时间总计;
    • COMMAND命令名/命令行。

常用命令:

top   // 每隔5秒显式所有进程的资源占用情况
top -d 2  // 每隔2秒显式所有进程的资源占用情况
top -c  // 每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789// 每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 // 每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

使用小技巧

  • 多核CPU监控
    在top基本视图中,第三行表示CPU状态信息;这里显示数据是所有CPU的平均值,如果想看每一个CPU的处理情况,按1即可;折叠,再次按1;

  • 高亮显示当前运行进程
    敲击键盘“b”(打开/关闭加亮效果),当按下后,当前正在运行的进程就会被高亮显示,如下图所示:

    top高亮显示

    可以通过键盘输入“y”键关闭或打开运行态进程的加亮效果。

  • 进程字段排序
    默认进入top时,各进程是按照CPU的占用量来排序的。但是,我们可以改变这种排序:

    • M:根据驻留内存大小进行排序
    • P:根据CPU使用百分比大小进行排序
    • T:根据时间/累计时间进行排序

    通过键盘输入“x”(打开/关闭排序列的加亮效果),top的视图变化如下:

    top高亮显示

总结

总结完毕,由于top命令时如此的常用,所以我们就不得不去学会使用它;希望我的这篇文章对你有一点帮助。

果冻想,认真玩技术的地方。

2018年12月23日,于内蒙古呼和浩特。

赞(3) 打赏
未经允许不得转载:果冻想 » Linux top命令详解
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻

请我喝杯咖啡也是不错的

支付宝扫一扫打赏

微信扫一扫打赏