大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-基础篇的第45篇文章。
今天我们来聊聊在系统管理中的另外一个命令-top命令。
top命令是我们在日常工作中用的比较多的一个,学会使用top,就相当于有了一把趁手的兵器,上可九天揽月,下可五洋捉鳖。
1. 先睹为快
执行完top命令之后,显示结果如下图,参数比较多,我们细细道来
我把开头的五行截图下来:
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,0wa | cpu等待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
3) 修改成5秒刷新一次
top -d 5
4) 监控指定进程,比如监控PID为1225的进程
[root@zmgaosh ~]# top -p 1225
总结:
top 命令是我们日常工作中用的比较多的一个命令, 学会看几个重要的参数即可,比如load averages,比如查看占用内存最多的进程等
我是高胜寒,一个在教培行业不忘初心的人, 关注我,一起学习,欢迎点赞收藏,我们下篇文章再见!
转载:https://blog.csdn.net/xinshuzhan/article/details/106944616