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
    

    评论栏