当我们在终端输入 top
命令时,会弹出一个变化的页面,打印出当前系统的大量重要指标,以及很多进程当前的运行情况:
可以看到,top
命令主要是两部分,第一部分为 头部指标
,打印的是当前系统级别指标;第二部分为 进程任务监控
,打印各个进程的当前运行情况。
我们从上往下,逐行进行介绍。
这一行与 uptime
命令的输出极其相似:
打印的参数意义为:
其中 load average 是每 5 秒钟检查一次活跃的进程数,然后按照特定的算法计算的得出。使用
这
个
负
载
数
÷
逻
辑
C
P
U
个
数
>
1
这个负载数 ÷ 逻辑CPU个数 > 1
这个负载数÷逻辑CPU个数>1
说明系统已经在超负荷运转了。
这一行在 top
页面时,可以通过 l
进行开关。
这行标识系统当前运行的进程有多少,多少个正在运行,有多少个在休眠,有多少个是 stopped 状态, 僵尸状态有多少个。
这行标识当前 CPU 的负载情况,显示的是百分比单位。
运行用户进程(未调整优先级)所占用的 cpu 时间,如果这个数很大,那么说明当前瓶颈很可能在 cpu 上,程序大多数为计算密集型。
运行内核进程所占用的 cpu 时间。如果这个数较大,一般说明服务器资源较小,或出现其他问题。
和 us
相同,都是运行用户进程所占用的 cpu 时间,如果这个数很大,但他是调整优先级的进程。
用于等待 io 完成的 cpu 时间,如果这个值很大,说明程序大多数为 io 密集型。这时候可能 cpu 也会比较繁忙,因为一直在切换上下文。
处理硬件中断的 cpu 时间。
处理软件中断的 cpu 时间。
虚拟机 hypervisor 占用的 cpu 时间,如果当前处于一个 hypervisor 下的 vm,这个 hypervisor 其实也是要消耗一部分 cpu 处理时间的。
在 top
命令界面,使用 t
进行切换,可以转换 %cpu 和 tasks 这两行的表达显示。
这两行标示的是内存的使用情况,类似于 free
命令的结果,但有区别:
free # free 命令结果
类似于 task 和 %Cpu 行,使用 m
可以切换 Kib Mem 和 KiB Swap 行的表示方式。
物理内存总量。
内存空间空闲总量。
使用中的内存总量。
内存中缓存的占用,如果开了关系型数据库,一般此类会占用较多。
交换分区总量。
交换分区占用量。
交换分区空闲总量。
交换分区中缓冲的总量。
如果用 windows 的内存管理来看待这些指标是不行的,windows 是每个程序使用多少,占用多少;但 linux 有内存管理的特殊性,不能单单只看 free
这一项来认为我们内存空间只有这么多了。
在 Mem
中内存总量 used
指的是现在系统内核控制的内存大小,而 free
是内核认为还未纳入其管控的数量(如果你现在是虚拟机就知道我们给虚拟机 16G mem,并不是立马就占用了 16G。)。而 used
代表控制的内存大小,并不是当前程序正在使用的,而最多只能表示使用过,在使用后 used
并不会变为 free
,所以理论上 free
只会越来越少,并不能通过这一个指标来判断当前服务器内存已经不足。
但我们总是想看到当前系统还剩余多少内存可以给新开的程序使用,这里有个简易的公式:
f r e e + b u f f e r s + c a c h e d = a v a i l a b l e free + buffers + cached ~= available free+buffers+cached =available
而对于 Swap 空间,如果 Swap空间大小一直在不停变化,说明内核在不断在 Mem 和 Swap 两个空间中交换数据,说明 Mem 空间已经无法满足,Swap 中已经开始占用,系统内存真正不够用了!
监控此时此刻系统中运行的任务情况:
PID 进程id,代表进程的唯一标识(那个该死的屁ID)
USER 该进程所有者的实际用户名
PR 进程的优先级,如果是字母rt
标识这些进程处于实时优先级
rt_priority
。
这个值是最终的优先级标识,越大,优先级越高。
nice
值,-20~20,越小优先级越高,用户最大设置为19.这个值,设置后linux自己调度计算出最终优先级PR
S W A P + R E S = V I R T SWAP+RES=VIRT SWAP+RES=VIRT
RES 进程使用(还未被换出的)物理内存大小,单位kb,计算公式为:
R
E
S
=
C
O
D
E
+
D
A
T
A
RES=CODE+DATA
RES=CODE+DATA
S 当前进程状态
D 不可中断的睡眠状态
R 运行
S 睡眠
T 跟踪/停止
Z 僵尸进程
%CPU 占用的 cpu 百分比
%MEM 占用的 mem 百分比
TIME+ 运行时间
COMMAND 进程名称
如果想看具体的进程路径或者启动命令,可以按 c
进行切换。( ls -ltr /proc/$PID/exe)
单位都可以通过 e
进行切换:
默认排序是按照当前 CPU
排序,然后按照 PID
进行排序,我们更多的时候是希望自定义各类排序。我们可以在 top
命令期间按下:
P
以 cpu 占据时间百分比进行排序。
M
以 mem 占据时间百分比进行排序。
T
以积累占用 cpu 时间进行排序。
当然,我们还可以通过其他办法进行排序,比如:bx
也是博主经常使用的方式。
然后可以使用 shift+<
和 shift+>
进行左右移动,按照 head
头进行降序排序。
其中 b
为高亮,x
为选中排序。
在 top
命令界面,按下 f
能够进入进程控制页面。
在这个页面中,使用 空格
或者 d
能切换是否需要显示。
使用 s
来选择以那一列进行排序,
使用 ↑
和 ↓
进行命令选择。
按 q
退出到之前的页面。
在 top
命令页面,按下 h
可以进入帮助文档页面,里面详细的说明了各种使用参数:
### 管理进程
k
可以给对应 pid 一个 kill -9 信号,用来杀死进程。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t4UI6YiD-1669301427531)(static/boxcni80uVzIZ54Cdcy8Kb4ORnf.png)]
r
命令可以重新给一个 nice
值,进行优先级排序
q
或者 ctrl+c