目录
一、数据详解
首先说一下,这里将top命令展示的数据分为两部分来说,一部分是
系统统计数据
,另一部分是进程相关数据
。
1.1 系统统计数据
1.1.1 第一行
top - 23:02:41 up 20 days, 4:52, 1 user, load average: 0.00, 0.04, 0.05
- 23:02:41:表示当前时间
- up 20 days, 4:52:表示系统运行时间,这里就是20天4小时52分钟(在这个期间没有重启过)
- 1 user:当前系统登录用户数
load average
: 0.00, 0.04, 0.05:表示系统过去1、5、15分钟内的平均负载。load average就是load的平均值,而load就是正在运行和准备运行的进程总数
,这里就表示一段时间内进程的数量。
在这一行中,我们特别关注的数据是load average
。从网上看到两种说法。
(1)一种为load average / 逻辑cpu核数>5
时,系统就超负荷,常用来判断cpu性能优劣。
## 逻辑cpu个数
[root@YFF ~]# cat /proc/cpuinfo | grep 'processor' | wc -l
1
(2)另一种为load average显示的负载均值,只能作为判断系统过去某个时间段的状态的参照,与cpu的性能关系不大
。实际需要使用vmstat
命令显示的run值和blocked值,当出现明显较多的blocked的时候,就说明cpu产生了瓶颈
。
参考链接:
CPU核数和load average的关系
关于CPU的运行队列与系统负载
1.1.2 第二行
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
第二行为进程
的数据。这里表示总共87个进程、1个正在运行、86个正在休眠、0个停止、0个处于僵尸状态的。
关于进程状态,根据查阅资料来看,有三态模型
和五态模型
两种分类方式。(1)三态模型:分为就绪、运行、阻塞
三种状态。(2)五态模型:运行、可中断、不可中断、停止、被跟踪
。
参考链接:
进程的描述与控制 进程的状态和转换 三态模型和五态模型
操作系统:进程的三种状态
Linux中进程状态
1.1.3 第三行
%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
us
:cpu运行(未调整优先级的)用户进程
时间占比。常见的用户进程为Shells、数据库、web服务器....
。sy
:cpu运行内核进程
时间占比。常见的内核进程为分配内存、IO操作、创建子进程...
。- ni:cpu运行(已调整优先级的)
用户进程
时间占比。 - id:cpu处于空闲状态时间比例。
wa
:CPU用于等待IO完成
的CPU时间占比(当CPU发起读写操作时,需要等待磁盘驱动器将数据读入内存,从而导致CPU在等待的这一段时间无事可做)。- hi:处理硬件中断的CPU时间占比。
si
:处理软件中断
的CPU时间占比。- st:steal time,当数值一直特别大的时候,就可能是虚拟机被超卖了。
这一行的数据为cpu使用时间百分比。其中us、sy、wa、si
是需要重点关注的数据。一般来说us>70%就高了,sy>30%就高了,wa>5%就高了
。
1.1.4 第四行
KiB Mem : 1881952 total, 121120 free, 708564 used, 1052268 buff/cache
- total:物理内存总量
- free:空闲内存总量(内核还未纳入其管控范围的数量)
- used:使用中内存总量(系统内核控制的内存数)
- buff/cache:缓冲(存)区内存量
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
buffer
:缓冲区 用于写磁盘 将数据写到buffer缓冲区中,最后一次性写入cache
:缓存区 用于读磁盘 将读到的数据放到cache缓存区,后面再从缓存区中读
参考链接:
Linux中Buffer和Cache的区别
linux 操作系统中buffer 和 cache 的作用
1.1.5 第五行
KiB Swap: 0 total, 0 free, 0 used. 1009180 avail Mem
- total:交换区总量
- free:空闲交换区总量
- used:使用的交换区总量
- avail Mem:可用交换区总量
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了
。
在性能监控分析中,对操作系统的物理内存的使用并不关注,在大部分场景下物理内存并没有成为我们的瓶颈点,但这并不是说在内存上就没有调优的空间了。
1.2 进程相关数据
- PID:进程ID
- USER:进程所有者
- PR:进程的调度优先级
- NI:进程的nice值(优先级),越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT
:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES- RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
- SHR:进程使用的共享内存大小,单位kb
- S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU
:上次更新到现在的CPU时间占用百分比%MEM
:进程使用的可用物理内存百分比。- TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
- COMMOND:运行进程所使用的命令。进程名称(命令名/命令行)
二、使用详解
2.1 top命令参数选项
2.1.1 查看指定进程—— - p 进程号
top -p 进程号 :可以将进程数据中只显示指定进程号的数据
2.1.2 设置屏幕刷新时间—— - d 秒数
top -d 秒数 :默认情况下,top显示的数据1s刷新一次,通过-d参数可以设置刷新时间间隔
2.1.3 输出到文件—— -b>文件路径
[root@YFF home]# top -n 3 -b>/home/b.txt
2.1.4 其他相关命令参数
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
2.2 交互命令
2.2.1 显示进程绝对路径——c
top命令执行后,按下c
键即可。会显示命令的名称及完整命令行
2.2.2 根据CPU使用率排序——P
top命令执行后,按下P
键即可。
2.2.3 根据物理内存使用率排序——M
top命令执行后,按下M
键即可。
2.2.4 显示每个核的CPU状况——1
top命令执行后,按下1
键即可。
2.2.5 其他相关交互命令
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。