分享

时刻掌握系统运行状态-深度理解top命令

 编程一生 2022-03-09

windows系统有任务管理器,linux系统也时刻掌握系统运行状态的工具: top命令。这个命令如此常见以至于很多程序员对top的进入熟练程序远超过在windows系统下运行任务管理器。但是多数人对top命令的掌握都是冰山一角,今天咱们就来了解一下top命令的强大。

在此之前,我先结合自身工作经历来说明一下为什么要学习top命令。

在大厂工作,很多的监控数据都是通过web界面统计的。记得很多年前,第一次看到这种web界面的统计数据,比如nice、idolt。我很迷惑,看不懂,但又感觉应该是常识还不好意思问。自己查资料还不好查,因为不知道它到底包装了什么。后来,我发现监控数据指标项的原型在top命令都可以找到。

linux命令作为程序员的一项基本技能,很多人都熟练掌握uptime、free、date等,提到的这三个命令要展示的数据,在top命令中全都包含了。所以用好了top,可以节省其他一些命令的学习成本。

本文的大纲如下,其中页面交互操作在网上搜到的文章中介绍的少且不全,是本文的重点。

top命令行

使用格式:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。

上面命令把刷新时间设置为5s刷新一次,回车后进入top页面,这时候按下s键就可以看到刷新频率信息已经被改成了5s。

p:通过指定监控进程ID来仅仅监控某个进程的状态。

上面命令执行后进入top界面只会显示549这一个进程的信息。

n:指定循环数量

执行这个命令后,top刷新三次就自动退出了。其实这个命令的最主要价值是将结果输出到文件。

执行上面使用批处理模式循环一次后输出到test.txt文件。less这个文件可以看到top的快照。

q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S:指定累计模式。


s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。


i:使top不显示任何闲置或者僵死进程。


c:显示整个命令行而不只是显示命令名。

top界面

top界面是linux系统的良心之作。它为了让大家看linux系统像看web界面一样友好,做了这个功能。虽然从审美上,比咱们一般见到的web界面逊色不少,但是功能强大是一般web界面比不了的。像极了古代的才女,没有绝世容颜,却有绝世的才华。

top界面的布局和下面咱们平时最常用的这种web页面是一样的,上面一部分是整体信息,下面是按照维度来展示的表格内容。像下面的常见的大白web界面,其实最大的优势不是颜值,而是无需登录终端。所以一些人把这种无需登录终端的操作叫做“白屏操作”。

整体统计信息

第一行,任务队列信息,同 uptime 命令的执行结果

系统时间:07:27:05

运行时间:up 1:57 min,

当前登录用户:  3 users

平均负载  load average: 0.00, 0.00, 0.00

average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

一个经常运行的linux机器,一般15分钟的数据,每次刷新时数据最稳定。因为数据周期长,受瞬时波动更小。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。关于负载的含义,网上最广泛的示例,是通过桥梁的通过率来解释的。以下以单核cpu为例说明,如果是多核,要乘以核数。

系统负荷为0,意味着大桥上一辆车也没有  

系统负荷为0.5,意味着大桥一半的路段有车 

系统负荷为1.0,意味着大桥的所有路段都有车,但仍然可以顺次通行  

系统负荷为1.7,除了桥满之外,在桥的入口处还有70%的车辆在等待

来一个中文对照表图,方便大家记忆:

第二行,Tasks — 任务(进程)

总进程数:150 total, 进程状态统计:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

进程状态详细讲解至少还要三千字,我会专门写一篇来讲。这里主要介绍僵尸进程。有些进程实际已经结束了,但是需要等待其父进程来将其收回。但是父进程可能忘记了进行收回,使得此僵尸进程一直处于占用系统资源的状态。也有可能是父进程先于此僵尸进程结束了,这样父进程无法收回讲师进程的资源。当然,linux系统不会容忍僵尸进程一直存在,系统本身会定期检查并收回僵尸进程的资源。

来一个中文对照表图,方便大家记忆:

第三行,cpu状态信息

0.0%us【user space】— 用户空间占用CPU的百分比。

0.3%sy【sysctl】— 内核空间占用CPU的百分比。

0.0%ni【nice】— 改变过优先级的进程占用CPU的百分比

99.7%id【idle】— 空闲CPU百分比

0.0%wa【wait】— IO等待占用CPU的百分比

0.0%hi【Hardware IRQ】— 硬中断占用CPU的百分比

0.0%si【Software Interrupts】— 软中断占用CPU的百分比

来一个中文对照表图,方便大家记忆:

界面交互操作

当我们选中cpu这一行,并按下数字 1。页面会变成这样:

因为这里使用的是是4核cpu,所以会显示cpu0~cpu3的使用情况。再按数字1可恢复成cpu总体情况。

第四五行 物理内存状态和swap交换分区状态

1003020k total,   234464k used,   777824k free,    24084k buffers【缓冲的内存量】

2031612k total,      536k used,  2031076k free,   505864k cached【缓冲的交换区总量】

来一个中文对照表图,方便大家记忆:

冲和缓存

先弄清楚一个概念:缓冲和缓存。

内存速度是远远高于磁盘速度的,要想磁盘和内存同步运行,就要用到缓冲和缓存。

写操作,用缓冲。内存中的数据要写入磁盘,可以先写入缓冲数据由缓冲同步到磁盘。这样,内存可以被节约出来做一些其他的事情。

读操作,用缓存。要从磁盘上读取数据时,会先读到缓存中。再由缓存和程序进行交互。

可用内存avail mem到底是多少

咱们通常在监控上看到的内存指标avail mem,用 total、used、free、bufferscached加减乘除都不对。原因是used是实际使用的内存,buffers和cached虽然被占用但是可以很快被释放,而且在某一瞬间并不是所有的buffers/cached空间都被占满了,这一瞬间虽名义上被buffers/cached占用着,但是实际上没有用的+free就是avail mem。

界面交互操作

我要说free可以做的top的四五行都有,有的朋友可能不服。free -h可以人性化显示内存单位,不像是top只是k为单位时那么难看。那你试试shift+e,每次按展示都会按照KiB、MiB、GiB、TiB、EiB的顺序打圈。

m键切换还可以进行这一部分的图形化展示,竖线条模式


再次按m键进入进度条模式。当然,再次m键可以恢复原状。

单个进程维度信息

由于重要属性的含义和用法,在《热点和秒杀来临前要做的5件事》这篇文章中详细讲过,先直接上中英文对照表:

这里补充nice值的含义。说一个人很nice,一般表示他彬彬有礼,很谦让。nice表示用户空间进程的CPU的调度优先级,范围为[-20,19]。nice值越高,表示越谦让,优先级越低。

界面交互操作

我说过top命令非常强大,那就是说单个进程维度信息也不可能只像平时看到的那样少,先来了解一下在白屏操作咱们常用的排序在top界面怎么做:

注意按f进入上面界面后,有的列前面有个*号。点击空格键,可以在取消*号和添加*号之间切换。有*号的按q退出排序字段选择界面之后,就会显示在单个进程维度信息中。

在这个界面,可以选中一个右键全选将其上下移动,按回车确定后,按q退出后看到的顺序就是移动后的顺序。

界面交互操作

除了上面穿插在文中的,再补充一些界面交互操作。

z键可以进入彩色模式,再一次z键可以退出。

b键可以高亮选中,上下键可以切换选中。再按b键可退出选中。

top中显示的数据是定时刷新的,按s

为方便大家记忆,界面交互操作总结如下:

shift+e 切换内存显示模式(可重复按键切换)

z 切换是否彩色显示(可重复按键切换

m 切换内存显示模式可重复按键切换

e 切换底部进程中单位的显示模式可重复按键切换

b 切换高亮选中可重复按键切换

W 把当前配置保存到文件中,下次启动top会使用当前的配置

h 进入帮助菜单(进入菜单后,可安ESC或q退出帮助菜单)

q 退出 top 命令

N 按PID大小顺序排列

x 高亮显示序的列

s 改变画面刷新频率

n 设置在金恒列表所显示的进程的数量

L 搜索指定内容

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多