linux从青铜到王者-详解top命令

1,139 阅读6分钟

这是我参与更文挑战的第13天, 活动详情查看:更文挑战

今天我们来聊聊在系统管理一个非常重要的命令-top, 运维人员必会命令, 非常重要。

top命令是我们在日常工作中用的比较多的一个,学会使用top,就相当于有了一把趁手的兵器,上可九天揽月,下可五洋捉鳖。

在这里插入图片描述

1. 先睹为快

执行完top命令之后,显示结果如下图,参数比较多,我们细细道来

image.png

我把开头的五行截图下来: 在这里插入图片描述

2. 第一行的含义:

信息含义
15:29:56当前时间
up 6days运行了6Tina
4users当前登录用户数
load average系统负载,三个数值分别表示1分钟,5分钟,15分钟前到现在的平均值
load average详解

load average: 指的是平均负载,在Linux当中,就是系统负载的平均值,它主要是将正在运行的线程对系统的需求显示为平均运行数和等待线程数。

如果平均值为0.0 表示系统处于空闲状态。 一般很多工具在使用这个load average的时候都会选择1分钟,5分钟和15分钟的平均值, 这里有个技巧:

-** 如果1min平均值高于5分钟或者15分钟的平均值,表示负载在增加 **

  • 如果1分钟平均值低于5分或者15分钟的平均值,表示负载在减少。

通过上面的技巧我们很容易判断当前负载是在持续增加还是减少,如果持续增加我们只需要判断当前是否达到了最大负载的阈值, 持续减少,我们几乎不用再去介入,当然你想去研究下为什么15分钟之前的负载突然增高了,也是可以的。

在这里插入图片描述

有很多论文上说,这里的load averages指的是系统负载,但我们达不到应用层,所以还是认为是cpu的负载吧。

load averages反应的是cpu的负载,其实是不准确的, 准确的说,load averages 反应的是System load averages. 检测的是正在运行和等待运行的线程数,包括cpu,磁盘,不间断锁等等。

我们可以这么理解:

当load averages较高的情况下,说明等待运行的任务比较低多,因此轮到该任务运行的等待时间就会出现较大延迟,然后反应在负载上就成了负载变高

经验值:

单核心,1分钟的系统平均负载不要超过3,就是ok的。

所以:

cpu 核心数load averages负载情况
1大于3负载过高
4大于12负载过高

注: 这里的cpu核心指的是逻辑核心数

怎么查看逻辑核心数?

方法一: 使用top命令,进入后,按1就可以看到cpu核心数。

方法二: [root@zmgaosh ~]# cat /proc/cpuinfo | grep 'processor' | sort | uniq | wc -l 2

在这里插入图片描述

3. 第二行和第三行的含义

在这里插入图片描述

信息含义
Tasks:108 total服务器的进程总数
1 running正在运行的进程数
106 sleeping睡眠的进程数
1 stopped停止的进程数
0 zombie僵尸进程数
%Cpu(s):1.2us系统用户进程使用cpu百分比
1.7sy内核中进程占用cpu百分比
0.0ni用户进程数空间内,改变过优先级的进程 占用CPU的百分比
97.2 id空闲cpu百分比
0,0wacpu等待IO完成的时间总量
0.0 hi硬中断占cpu的百分比,也就是硬中断造成cpu开销是多少
0.0si软中断占CPU的百分比,也就是软中断造成cpu开销是多少
0.0st虚拟机占用物理机的时间

4. 内存信息: 第四行和第五行的详细信息

在这里插入图片描述

信息含义
Mem物理内存总量
2094204free空闲内存总量
308472 used使用的物理内存总量
1477184 buff/cache内核缓存的内存量
swap: 0 total交换区总量
0 free空间交换区总量
0used使用的交换分区
3273356 avail mem总的可利用内存量

在这里插入图片描述

5. 进程信息(第7行)

在这里插入图片描述

1)每列的含义
列名含义
PID进程id
USER进程所有者的用户名
PR优先级(由内核动态调整),用户不能
NI进程优先级。 nice值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT(virtual memory usage) 虚拟内存,是进程正在使用的所有内存(ps中标为VSZ)
RES(resident memory usage) 是进程所使用的物理内存。实际实用内存(ps中标为RSS)
SHR共享内存大小,单位kb
S进程状态。
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND命令名/命令行
参数详解

这个面试题一定能要记熟:

面试题: VIRT ,RES,SHR这三个值分别代表什么?

VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来

其实知道了这三个值代表什么也并没什么用,最重要的是需要知道下面这句话: VIRT值最高的进程就是内存使用最多的进程

如果服务器特别卡,你用top排查,那个VIRT数值最大的进程就是元凶,抓住它

在这里插入图片描述

top常用的快捷键

默认3s刷新一次,按s修改刷新时间

快捷键作用
q退出
s修改刷新时间,默认3秒刷新一次,按空格立即刷新
P按CPU排序
M按内存排序
T按时间排序
p进程IP,查看某个进程状态
1显示每个内核的CPU使用率
u/U指定显示的用户
h帮助

top常用举例

1) 找出系统中使用cpu最多的进程

运行top , 找出使用CPU最多的进程 ,按大写的P,可以按CPU使用率来排序显示

2) 查看gaosh用户的进程内存使用情况

[root@zmgaosh ~]# top -u gaosh

image.png

3) 修改成5秒刷新一次
        top -d 5
4) 监控指定进程,比如监控PID为1225的进程

[root@zmgaosh ~]# top -p 1225

image.png

总结:

top 命令是我们日常工作中用的比较多的一个命令, 学会看几个重要的参数即可,比如load averages,比如查看占用内存最多的进程等

在这里插入图片描述