• 一天一个 Linux 命令(33):top 命令


    一、简介

    Linux下的top是一款常用的性能分析工具的命令。能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

    top命令可以动态显示系统中各个进程的资源,而且可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.

    二、格式说明

    top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
    
    top [参数]
    

    三、选项说明

    -d	改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
    -q	没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
    -c 	切换显示模式
    -s	安全模式,将交谈式指令取消, 避免潜在的危机
    -S 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
    -i	不显示任何闲置 (idle) 或无用 (zombie) 的行程
    -n	更新的次数,完成后将会退出 top
    -b	批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
    

    四、命令功能

    用于实时显示系统中各个进程的资源占用状况。

    五、常见用法

    5.1 显示进程信息

    # top
    
     

    说明:

    第一行:任务队列信息,同 uptime 命令的执行结果

    15: 36: 28 当前系统时间

    up 222 days, 20:35 系统已经运行了222天20小时35分钟(在这期间系统没有重启过!)

    1 user 当前有1个用户登录系统

    load average: 0.00, 0.02, 0.05 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况

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

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

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

    第三行:cpu状态信息

    us, user    : time running un-niced user processes
    sy, system  : time running kernel processes
    ni, nice    : time running niced user processes
    id, idle    : time spent in the kernel idle handler
    wa, IO-wait : time waiting for I/O completion
    hi : time spent servicing hardware interrupts
    si : time spent servicing software interrupts
    st : time stolen from this vm by the hypervisor
    

    0.2 us 用户空间占用CPU的百分比

    0.2 sy 内核空间占用CPU的百分比

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

    99.3 id 空闲CPU百分比

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

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

    0.0 si 软中断(Software Interrupts)占用CPU的百分比

    0.0 st虚拟机占用百分比, 也就是说当前VM中的cpu cycle被虚拟化占用的百分比

    第四行:内存状态

    8008656 total 物理内存总量

    467632 free 使用中的内存总量

    2209040 used 空闲内存总量

    5331984 buff/cache 缓存的内存量

    第五行:swap交换分区信息

    0 total 交换区总量

    0 free 使用的交换区总量

    0 used 空闲交换区总量

    5493404 avail Mem 缓冲的交换区总量

    注意:

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

    如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:467632+5331984 +5493404 = 11293020,大约11个G。

    对于内存监控,在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 进程名称(命令名/命令行)

    其他使用说明

    在top执行后,进行以下操作,可以得到不同的数据显示

    1.多U多核CPU监控

    按键盘数字"1",可监控每个逻辑CPU的状况

     

    我们可以看出服务器有4个逻辑CPU,实际上是1个物理CPU。再按数字键1,就会返回到top基本视图界面。

    如果想看cpu相关信息,可以在文件 /proc/cpuinfo查看

    物理cpu数

    # grep "physical id" /proc/cpuinfo | sort | uniq | wc -l
    

    cpu 核数

    # grep 'cpu cores' /proc/cpuinfo | uniq | awk -F':' '{print $2}'
    

    逻辑cpu数

    # grep 'processor' /proc/cpuinfo | sort | wc -l
    

    2.高亮显示当前运行进程

    敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下:

     

    我们发现进程id为15417的"top"进程被加亮了,top进程就是视图第三行显示的进程,可以通过敲击“y”键关闭或打开运行态进程的加亮效果。

    3.进程字段排序

    进入top时,各进程是按照CPU的占用量来排序的,在下图中进程ID为11209的dockerd进程排在第一(cpu占用0.7%),进程ID为582的systemd-resolve进程排在第二(cpu占用0.3%)

     

    敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下

     

    top默认的排序列是“%CPU”。

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

    下图是按一次”shift + >”的效果图,视图现在已经按照%MEM来排序。

     

    5.top交互命令

    在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。

    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文件中 
    

    5.2 显示完整命令

    # top -c
    

    5.3 以批处理模式显示程序信息

    # top -b
    

    5.4 以累积模式显示程序信息

    # top -S
    

    5.5 设置信息更新次数

    #表示更新两次后终止更新显示top -n 2
    

    5.6 设置信息更新时间

    #表示更新周期为3秒,每3秒刷新一次# top -d 3
    

    5.7 显示指定的进程信息

    #显示进程号为139的进程信息,CPU、内存占用率等# top -p 139
    

     

  • 相关阅读:
    java 多线程 day01 创建线程
    mysql 时间处理函数
    导出excel
    mysql 从零学习
    java 读取xlsx
    跳出多重循环
    mysql 基础
    spark 快速入门 java API
    java 反序列化PHP
    完整mybatis应用
  • 原文地址:https://www.cnblogs.com/joshua317/p/15495696.html
Copyright © 2020-2023  润新知