zoukankan      html  css  js  c++  java
  • Linux TOP命令详解

    一、字段含义和命令讲解

    1. 首先介绍top中一些字段的含义

    VIRT:virtual memory usage 虚拟内存
    1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等。
    2、假如进程申请100M的内存,但实际只使用了10M,那么它会增长100M,而不是实际的使用量。

    RES:resident memory usage 常驻内存
    1、进程当前使用的内存大小,但不包括swap out。
    2、包含其他进程的共享。
    3、如果申请100M的内存,实际使用10M,它只增长10M,与VIRT相反。
    4、关于库占用内存的情况,它只统计加载的库文件所占内存大小。

    SHR:shared memory 共享内存
    1、除了自身进程的共享内存,也包括其他进程的共享内存。
    2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小。
    3、计算某个进程所占的物理内存大小公式:RES – SHR。
    4、swap out后,它将会降下来。

    DATA
    1、数据占用的内存。如果top没有显示,按f键可以显示出来[实测,按f键是帮助,按Esc键退出帮助]。
    2、真正的该程序要求的数据空间,是真正在运行中要使用的。

    2. top 运行中可以通过 top 的内部命令对进程的显示方式进行控制,内部命令如下:
    s – 改变画面更新频率[按s键后,输入刷新频率秒数,然后回车]
    l – 关闭或开启第一部分第一行 top 信息的表示
    t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
    m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
    N – 以 PID 的大小的顺序排列表示进程列表
    P – 以 CPU 占用率大小的顺序排列进程列表
    M – 以内存占用率大小的顺序排列进程列表
    h – 显示帮助[Esc键退出]
    n – 设置在进程列表所显示进程的数量
    q – 退出 top


    3.序号 列名 含义
    a PID 进程id
    b PPID 父进程id
    c RUSER Real user name
    d UID 进程所有者的用户id
    e USER 进程所有者的用户名
    f GROUP 进程所有者的组名
    g TTY 启动进程的终端名,不是从终端启动的进程则显示为 ?
    h PR 优先级
    i NI nice值,负值表示高优先级,正值表示低优先级
    j P 最后使用的CPU,仅在多CPU环境下有意义
    k %CPU 上次更新到现在的CPU时间占用百分比
    l TIME 进程使用的CPU时间总计,单位秒
    m TIME+ 进程使用的CPU时间总计,单位1/100秒
    n %MEM 进程使用的物理内存百分比
    o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
    q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    r CODE 可执行代码占用的物理内存大小,单位kb
    s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    t SHR 共享内存大小,单位kb
    u nFLT 页面错误次数
    v nDRT 最后一次写入到现在,被修改过的页面数。
    w S 进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
    x COMMAND 命令名/命令行
    y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
    z Flags 任务标志,参考 sched.h

    默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

    通过 f 键可以选择显示的内容,选中后按空格键,然后在按Esc键退出到top界面,刚才选中的就也显示出来了。(按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定)。 
    按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
    按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。


    4. top使用方法:

    使用格式:top [-] [d] [p] [q] [c] [C] [S] [s] [n]

    参数说明:
    d:指定每两次屏幕信息刷新之间的时间间隔,可以是整数,也可以是小数。当然用户可以使用s交互命令来改变之。
    p: 通过指定监控进程ID来仅仅监控某个进程的状态。
    q: 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
    S:指定累计模式[啥意思?]。
    s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
    i:使top不显示任何闲置或者僵死进程。
    c: 显示整个命令行而不只是显示命令名


    5. 常用命令说明:
    Ctrl+L:擦除并且重写屏幕[现在没有了]
    k:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
    i:忽略闲置和僵死进程。这是一个开关式命令。
    q:退出程序
    r: 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 
    S:切换到累计模式。[好像没有用]
    s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
    f或者F:从当前显示中添加或者删除项目。
    o或者O:改变显示项目的顺序
    l:切换显示平均负载和启动时间信息。
    m:切换显示内存信息。
    t:切换显示进程和CPU状态信息。
    c:切换显示命令名称和完整命令行。
    M:根据驻留内存大小进行排序。
    P:根据CPU使用百分比大小进行排序。
    T:根据时间/累计时间进行排序。
    W:将当前设置写入~/.toprc文件中。

    默认进入top时,各进程是按照CPU的占用量来排序的。

    6.查看多核CPU命令
    mpstat -P ALL 和 sar -P ALL [Ubuntu服务器和Android手机都没有这两个命令,但是显示的内容和top界面按'1'基本上是完全一致的]
    说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txt

    二、实例讲解

    1. top命令经常用来监控Linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。
    本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。

    输入top命令

    1.1 系统运行时间和平均负载:

    top命令的顶部显示与uptime命令相似的输出,这些字段显示:

    当前时间
    系统已运行的时间
    当前登录用户的数量
    相应最近5、10和15分钟内的平均负载。
    可以使用'l'命令切换uptime的显示。

    21:45:11 — 当前系统时间
    0 days, 4:54 — 系统已经运行了4小时54分钟(在这期间没有重启过)
    2 users — 当前有2个用户登录系统
    load average:0.24, 0.15, 0.19 — load average后面的三个数分别是5分钟、10分钟、15分钟的负载情况。
    load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

    1.2 任务:

    Tasks — 任务(进程),系统现在共有144个进程,其中处于运行中的有1个,143个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

    第二行显示的是任务或者进程的总结。进程可以处于不同的状态。这里显示了全部进程的数量。除此之外,还有正在运行、睡眠、停止、僵尸进程的数量(僵尸是一种进程的状态)。这些进程概括信息可以用't'切换显示。

    1.3 CPU 状态:

    这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示:
    us, user: 运行(未调整优先级的) 用户进程的CPU时间
    sy,system: 运行内核进程的CPU时间
    ni,niced:运行已调整优先级的用户进程的CPU时间
    wa,IO wait: 用于等待IO完成的CPU时间
    hi:处理硬件中断的CPU时间
    si: 处理软件中断的CPU时间
    st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。
    可以使用't'命令切换显示。

    1.3% us — 用户空间占用CPU的百分比。
    1.0% sy — 内核空间占用CPU的百分比。
    0.0% ni — 改变过优先级的进程占用CPU的百分比
    97.3% id — 空闲CPU百分比
    0.0% wa — IO等待占用CPU的百分比
    0.3% hi — 硬中断(Hardware IRQ)占用CPU的百分比
    0.0% si — 软中断(Software Interrupts)占用CPU的百分比


    1.4 内存使用:

    接下来两行显示内存使用率,有点像'free'命令。第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。
    物理内存显示如下: 全部可用内存、已使用内存、空闲内存、缓冲内存。相似地,交换部分显示的是:全部、已使用、空闲和缓冲交换空间。
    内存显示可以用'm'命令切换。

    509248k total — 物理内存总量(509M)
    495964k used — 使用中的内存总量(495M)
    13284k free — 空闲内存总量(13M)
    25364k buffers — 缓存的内存量 (25M)

    swap交换分区
    492536k total — 交换区总量(492M)
    11856k used — 使用的交换区总量(11M)
    480680k free — 空闲交换区总量(480M)
    202224k cached — 缓冲的交换区总量(202M)

    这里要说明的是不能用windows的内存概念理解这些数据,如果按windows的方式此台服务器“危矣”:8G的内存总量只剩下530M的可用内存。Linux的内存管理有其特殊性,复杂点需要一本书来说明,这里只是简单说点和我们传统概念(windows)的不同。
    第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
    如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:
    13284+25364+202224 = 240M。
    对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

    第六行是空行

    1.5 各进程(任务)的状态监控:

    PID:进程ID,进程的唯一标识符
    USER:进程所有者的实际用户名。
    PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
    NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
    VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
    S:这个是进程的状态。它有以下不同的值:
    D - 不可中断的睡眠态。
    R – 运行态
    S – 睡眠态
    T – 被跟踪或已停止
    Z – 僵尸态
    %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
    %MEM:进程使用的可用物理内存百分比。
    TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
    COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

    还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组ID和其他更多的信息。想显示更过,top命令界面中按"f"键,然后选中还要显示的内容,然后按空格选中,Esc键退回到top界面。


    三、交互命令

    1.top界面,按'h'键显示帮助,可以用h或?显示交互命令的帮助菜单。

    2.top界面每次按'Enter'或'Space'键都会刷新显示。top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。top启动时可以"-d 0.5"指定自动刷新间隔,top界面也可以
    按's'键设定自动刷新间隔。

    3.top界面,按'1'键,可监控每个逻辑CPU的状况,同样按'1'键退出。[Android手机不可用]。

    4.按'b'键打开/关闭行加亮效果,'y'键关闭或打开运行态进程的加亮效果。'x'键打开/关闭排序列的加亮效果,按什么排序的就加亮哪一行。

    5.通过"shift + >"或"shift + <"可以向右或左改变排序列,默认是根据%CPU排序的。执行后可以看到上面的加亮行也会跟着变动。

    6.通过'f'键可以改变top显示的字段,前面有'*'的表示是显示的字段,没有'*'的是不显示的。 top命令界面中按"f"键,然后选中还要显示的内容,然后按空格选中,Esc键退回到top界面。


    四、top命令的补充

    1.监控java线程数:ps -eLf | grep java | wc -l

    2.监控网络客户连接数:netstat -n | grep tcp | grep 侦听端口 | wc -l

    参考:

    Linux top命令的用法详细详解:https://www.cnblogs.com/zhoug2020/p/6336453.html

  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/13781962.html
Copyright © 2011-2022 走看看