Linux 命令:top / htop / atop

Top

top 命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况

top 示意图

前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。

第一行: 任务队列信息

同 uptime 命令的执行结果,具体参数说明情况如下:

  • 15:12:32 — 当前系统时间
  • up 160 days, 1:07 — 系统已经运行了 160 天 1 小时 7 分钟(在这期间系统没有重启过的吆!)
  • 1 users — 当前有1个用户登录系统
  • load average: 1.15, 1.42, 1.44 load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行: Tasks — 任务(进程)

具体信息说明如下:

系统现在共有183个进程,其中1个运行中,182 个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行: cpu状态信息

具体属性说明如下:

0.5% us — 用户空间占用CPU的百分比。

0.3% sy — 内核空间占用CPU的百分比。

0.0% ni — 改变过优先级的进程占用CPU的百分比

99.2% id — 空闲CPU百分比

0.0% wa — IO等待占用CPU的百分比

0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比

0.2% si — 软中断(Software Interrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行: 内存状态

具体信息如下:
7444.8 total — 物理内存总量(单位: MB)
268.2 free — 使用中的内存总量(单位: MB)
6259.8 used — 空闲内存总量(单位: MB)
916.7 buff/cache — 缓存的内存量(单位: MB)
32949016k total — 物理内存总量(32GB)

14411180k used — 使用中的内存总量(14GB)

18537836k free — 空闲内存总量(18GB)

169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息

具体信息说明如下:

32764556k total — 交换区总量(32GB)

0k used — 使用的交换区总量(0K)

32764556k free — 空闲交换区总量(32GB)

3612636k cached — 缓冲的交换区总量(3.6GB)

备注:

第四行: 使用中的内存总量(used)

使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第六行: 空行

第七行 各进程(任务)的状态监控

项目列信息说明如下:

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时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

交互命令

  1. 按键盘数字“1”,可监控每个逻辑CPU的状况:
    image.png
  2. 进程字段排序
    默认进入top时,各进程是按照CPU的占用量来排序的

敲击键盘“x”(打开/关闭排序列的加亮效果

通过shift + >shift + <可以向右或左改变排序列

image.png

其他命令

h 显示帮助画面,给出一些简短的命令总结说明

k 终止一个进程。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序

r 重新安排一个进程的优先级别

S 切换到累计模式

s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s

f或者F 从当前显示中添加或者删除项目

o或者O 改变显示项目的顺序

l 切换显示平均负载和启动时间信息

m 切换显示内存信息

t 切换显示进程和CPU状态信息

c 切换显示命令名称和完整命令行

M 根据驻留内存大小进行排序

P 根据CPU使用百分比大小进行排序

T 根据时间/累计时间进行排序

W 将当前设置写入~/.toprc文件中

有参考 https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html

Atop

atop是一个功能非常强大的linux服务器监控工具,它的数据采集主要包括:CPU、内存、磁盘、网络、进程等,并且内容非常的详细,特别是当那一部分存在压力它会以特殊的颜色进行展示,如果颜色是红色那么说明已经非常严重了。

注意:所有的信息都是反映过去10S的状态信息

image.png

atop

列出了服务器的host、当前时间、信息收集的频率

PRC

该列展示整个系统的性能状况;

sys:过去10s所有的进程在内核态运行的时间总和
usr:过去10s所有的进程在用户态的运行时间总和
#proc:进程总数
#trun:过去10s转换的进程数
#zombie:过去10s僵死进程的数量
#exit:在10s采样周期期间退出的进程数量

CPU

cpu列展示了服务器的CPU整体的一个状态信息,包括内核和用户所占的比例、处理中断所占的比例、CPU的处于空闲下比例(这里是100%*cpu核心数,CPU有时候也会因为由于磁盘性能问题出现等待的空闲)

sys

在处理进程时处于内核态的时间所占的比例
usr
在处理进程时处于用户态的时间所占的比例
irq
在处理进程的中断请求所占的实际比例
idle
处于空闲状态下的时间比例(除了本身空闲,还有比如等待磁盘io的情况下也会处于空闲状态)
cpu:每个核心的状态信息,和总的CPU信息一样,每列加起来的总和就是总的CPU的状态信息。

CPL

cpl也反应了服务器整体的性能,展示信息包括进程等待队列数,分别从过去1分钟、5分钟、15分钟的采样信息。

avg1:过去1分钟进程等待队列数
avg5:过去5分钟进程等待队列数
avg15:过去15分钟进程等待队列数
csw(context swapping):上下文交换次数
intr(interrupt):中断发生的次数
numcpu

的核心数
mem:该列主要展示内存的使用信息。

tot:物理内存总量
free:空闲内存的大小(不能单单从这个字段就判断内存不足,还需要参考free -m中的-/+ buffers/cache

因为这块的内容随时就可以拿过来使用,还可以从是否有使用Swap来判断是否内存不足)
cache:用于页缓存的内存大小
dirty:内存中的脏页大小
buff:用于文件缓存的内存大小
slab:系统内核占用的内存大小

SWP

交换空间使用情况

tot:交换空间总量
free:交换空间剩余空间总量

PAG

虚拟内存分页情况

swin:换入内存页数
swout:换出内存页数
LVM/DSK:每个分区信息以一列来进行展示

busy:磁盘忙时所占比例
read、KiB/r 、MBr/s:每秒读的请求数和请求的kb、mb数
write、KiB/w 、MBr/w:每秒写的请求数和请求的kb、mb数
avq:磁盘平均队列长度(根据实际的监控该列好像是磁盘平均请求数avgrq)
avio:磁盘的平均io时间

NET

展示了传输层(TCP/UDP)、网络层(ip)、网络接口的网络传输信息。

transport:传输层(TCP/UDP)的数据输入输出的展示,例如在服务器的内部进程之间的数据传输就是在传输层展示,以为还不需要往下通过网络进行传输。

network:网络层(ip)的数据输入输出的展示;

eth0:默认的网络接口的数据输入输出的展示,也就是通过etho的ip的数据传输的展示,

sp:网卡的带宽(1000M)
pcki:传入的数据包的大小
pcko:传出的数据包的大小
si:每秒传入的数据大小
so:每秒传出的数据大小
coll(collisions):每秒的冲突数
mlti(MULTICAST):每秒的多路广播的数量
erri/erro:每秒输入输出的错误数
drpi/drpo:每秒的输入输出的丢包数
lo:通过127.0.0.1网络接口的数据传输的数据展示,参数和上面的eth0是一样的

进程列

m模式:内存状态模式

SYSCPU:过去10s内进程处于内核模式占用的CPU时间

USRCPU:过去10S进程处于用户模式占用的CPU时间

VSIZE:过去10S进程占用的虚拟空间大小

RSIZE:过去10S进程占用的内存空间大小

PSIZE:过去10S进程占用的页大小

VGROW:过去10S进程增长的虚拟空间大小

RGROW:过去10S进程增长的内存大小

SWAPSZ:过去10S进程使用交换空间的大小。

MEM:过去10S进程占用内存百分比

d模式:磁盘状态模式

RDDSK:过去10S进程读磁盘的数据量
WRDSK:过去10S进程写磁盘的数据量
DSK:过去10S进程所占磁盘的百分比
CMD:进程名
p模式:进程状态模式,同一个名称的进程显示一列,根据进程名进行分组显示

NPROCS:相同名称的进程数量

其它的参数上面已经有列出

v模式:线程状态模式

u模式:用户模式

根据用户进行分组显示

g模式:标准模式

s:进程当前的状态,包括:s(sleeping),R(runing)等

检测历史监控记录

/var/log/atop:atop日志文件,默认是每天0点开始会产生当天的一个日志文件,
然后可以通过atop -r file 查看信息,但是没有找到自动播放的的功能,只能通过输入b显示一个指定的时间的信息,可以写个循环来实现

atop -r /var/log/atop/atop_20220823 -b 13:00 -e 17:00

评论栏