linux top 命令指标简介

Top是linux中常用来了解系统运行状况的命令,一眼看过去有CPU和内存等信息,但是,仍有很多不知道是什么.这篇blog旨在解释top信息中的不同指标是什么意思.先上图.

最开始显示了当前时间,机器启动了多久,当前有几个用户(session).较为简单,不多做解释.

load average

CPU的平均负载,三个数字分别表示1分钟内,5分钟内和15分钟内的平均负载. 需要注意的是,这个值不是CPU的使用率(usage),而是反映CPU执行/等待队列的进程量,不是每一个进程都会占用很长时间.如何理解这个值呢,当这个值是多少的时候值得你注意呢?

Unix定义CPU负载: 当前正在执行进程数 + 正在等候执行的进程数

我们看到的这个值是通过 ‘CPU负载 / processor数量’ 得到的. 如果机器是单核处理器, 1代表processor有工作.如果是多核处理器,那么这个阈值将是核数.所以在4核处理器上,3.50依然不会让你的电脑宕机.

一般认为,值在阈值的70%的时候,就要考虑是否是个问题了.当为阈值100%的时候,需要立刻找到问题.大于100%的时候,问题已经严重了.

有时Load average高但是CPU usage低,说明很多进程都和CPU打交道,但是压力不在CPU,大家都在队列里等着,可能是在等I/O,这个时候可以结合别的看看I/O是不是有问题.

Tasks

linux内核正在管理的任务数,先上图

这张示意图展示了linux是如何管理Task的生命周期的, tasks后面显示的就是不同状态的task有多少.延伸阅读

CPU

man中解释如下,还是非常简单清楚的,随后补充一些迷惑的地方

Name Description
us time running un-niced user processes
sy time running kernel processes
ni time running niced user processes
id idle cpu time (or) CPU time spent idle
wa time waiting for I/O completion
hi time spent servicing hardware interrupts
si time spent servicing software interrupts
st time stolen from this vm by the hypervisor

un-niced : nice值为0的进程,nice值越高,被cpu执行的机会越少.nice值的范围是 -20 ~ 19

如果us或者sy长时间占去了CPU时间,首先应该定位是哪个进程占用的,这个从下面的列表中可以得出

对于wa过高,最后我会给出一个便利的工具排查问题,你也可以通过这篇blog排除.

关于处理器中断不是本文涉及的部分,可以参考这里

st是关于虚拟机的指标,出问题的情况不多吧.详细信息见这里

KiB Mem

RAM 的使用情况. 总共的,已用的和未用的量.

为了提高硬盘操作的速度,会用RAM缓存硬盘的数据. Buffers 就是缓存的这部分信息的元信息. Linux会帮你管理这部分.

KiB Swap

Swap 的使用情况. 总共的,已用的和未用的量.

为了提高硬盘操作的速度,会用swap缓存硬盘的文件. cache 就是缓存的这部分数据. Linux会帮你管理这部分. 与buffer比较, cache缓存的是页,buffer是块.

进程列表

Name Description
PID 进程号
USER 属于哪个用户
PR 优先级
NI nice值
VIRT 该进程占用的的虚拟内存大小
RES 使用物理内存的大小
SHR 占用的共享内存大小
S 进程状态
%CPU 占用率
%MEM RES 的占用率
TIME+ 该进程从启动到现在,占用CPU时间总长
COMMAND 命令是什么

详细介绍可以看man top. 这里简单补充一点可能迷惑的地方.

A. nice value 和 priority的区别

nice value 是用户为进程指定的优先级, 但是priority是系统运行时给定的. 不同linux版本可能对priority的计算方法不一样,一般来说

priority = nice_value + 20


glances

Glances 在top的基础上集成了更多系统信息,提供了更多友好的提示. 例如对于Critical的指标会以红色高亮. 对于出过问题的进程会有记录.


If I am wrong, pls feel free to correct me, thx:)

关于作者
一名软件工程师,热爱运动、英语和美食。希望大家在这里可以享用我的发现!