zoukankan      html  css  js  c++  java
  • linux命令之top专讲

    一、top命令简介

    top命令是动态查看进程变化,监控linux的系统状况;它是常用的性能分析工具,能够实时显示系统资源各个进程占用状况,类似windows的任务管理器。

    1.1 命令使用

    top 命令格式:

    top [-] [d] [q] [c] [S] [s] [i] [n] [b] [v] [h] [H] [p] [u]
    
    示例: [root@localhost ~]# top -h
          procps-ng version 3.3.10
        Usage:
          top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
    

    可选项:

    • -h 或 -v: 显示帮助或者版本信息

    • -b: 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

    • -c: 命令行列显示程序名以及参数

    • -d: 启动时设置刷新时间间隔

    • -H: 设置线程模式

    • -i: 只显示活跃进程

    • -n: 显示指定数量的进程

    • -p: 显示指定PID的进程

    • -u: 显示指定用户的进程

    • -q: 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行

    • -S: 安全模式,将交互式指令取消, 避免潜在的危机

    1.2 top视图界面中交互命令

    [root@www ~]# top

    image-20201108183722278

    top 运行中可以通过top 的内部命令对进程的显示方式进行控制。在top的视图中大概分为 上面的 统计区域+下面的进程区域 两部分命令/按键也不一样,内部交互命令如下:

    内部交互命令杂乱表

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

    1. 全局命令(针对top视图界面 )

    Enter/Space:刷新视图。

    h:帮助信息,查询各个交互命令的含义。

    O:是否展示进程区域中的0值,比如%CPU是0的将全部隐藏。

    A:在全屏模式和多窗口选择模式中切换。

    d:设置刷新时间间隔。

    E:切换内存和交换区单位。

    H:开启/关闭线程模式,以线程的方式展示。

    k:杀掉指定进程或线程。

    Z:改变颜色配置。

    q:退出。

    2. 概要区域

    • 1:显示CPU平均状态/分开显示各个逻辑CPU状态。
    • m:切换显示内存统计的数据。

    3. 进程区域

    • x:打开或关闭排序列的高亮效果。
    • z:切换颜色。
    • b:打开或关闭运行中进程的高亮效果。
    • c:切换显示命令/程序名和参数。
    • f:显示field管理。
    • u:按照执行用户显示进程。
    • i:显示所有进程或活跃的进程。
    • n:设置显示的进程数。
    • shift +>或shift +<可以向右或左改变排序列
      f键,可以进入编辑要显示字段的视图,有*号的字段会显示,无*号不显示,可根据页面提示选择或取消字段比如按 空格键 选择。

    1.3 top常用场景

    top -H -p pid # 显示某个进程所有活跃的线程消耗情况。
    

    常用操作命令

    命令 说明
    top 每隔5秒显式所有进程的资源占用情况
    top -d 2 每隔2秒显式所有进程的资源占用情况
    top -c 每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
    top -p 12345 -p 6789 每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
    top -d 2 -c -p 123456 每隔2秒显示pid是12345的进程的资源使用情况,并显示该进程启动的命令行参数

    二、top视图参数含义:

    [root@www ~]# top
    top - 20:29:20 up  1:24,  2 users,  load average: 0.00, 0.01, 0.02
    Tasks: 179 total,   1 running, 178 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :   995712 total,   252208 free,   404372 used,   339132 buff/cache
    KiB Swap:  2097148 total,  2097148 free,        0 used.   431828 avail Mem 
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                           
        61 root      20   0       0      0      0 S   0.3  0.0   0:02.84 kworker/0:1                       
      1817 root      20   0  162124   2320   1592 R   0.3  0.2   0:05.52 top                               
         1 root      20   0  191116   4120   2612 S   0.0  0.4   0:01.12 systemd 
    

    从上面的结果可以看出,top视图分为两部分:操作系统资源概况信息和进程信息。首先是分析资源概况中各个参数含义,再来分析进程信息中各个参数含义。

    我们先利用top命令进入视图,再f键看下全称信息,再q退出回到top视图。

    Fields Management for window 1:Def, whose current sort field is %CPU
       Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
       'd' or <Space> toggles display, 's' sets sort.  Use 'q' or <Esc> to end!
    
    * PID     = Process Id             TGID    = Thread Group Id     
    * USER    = Effective User Name    ENVIRON = Environment vars    
    * PR      = Priority               vMj     = Major Faults delta  
    * NI      = Nice Value             vMn     = Minor Faults delta  
    * VIRT    = Virtual Image (KiB)    USED    = Res+Swap Size (KiB) 
    * RES     = Resident Size (KiB)    nsIPC   = IPC namespace Inode 
    * SHR     = Shared Memory (KiB)    nsMNT   = MNT namespace Inode 
    * S       = Process Status         nsNET   = NET namespace Inode 
    * %CPU    = CPU Usage              nsPID   = PID namespace Inode 
    * %MEM    = Memory Usage (RES)     nsUSER  = USER namespace Inode
    * TIME+   = CPU Time, hundredths   nsUTS   = UTS namespace Inode 
    * COMMAND = Command Name/Line   
      PPID    = Parent Process pid  
      UID     = Effective User Id   
      RUID    = Real User Id        
      RUSER   = Real User Name      
      SUID    = Saved User Id       
      SUSER   = Saved User Name     
      GID     = Group Id            
      GROUP   = Group Name          
      PGRP    = Process Group Id    
      TTY     = Controlling Tty     
      TPGID   = Tty Process Grp Id  
      SID     = Session Id          
      nTH     = Number of Threads   
      P       = Last Used Cpu (SMP) 
      TIME    = CPU Time            
      SWAP    = Swapped Size (KiB)  
      CODE    = Code Size (KiB)     
      DATA    = Data+Stack (KiB)    
      nMaj    = Major Page Faults   
      nMin    = Minor Page Faults   
      nDRT    = Dirty Pages Count   
      WCHAN   = Sleeping in Function
      Flags   = Task Flags <sched.h>
      CGROUPS = Control Groups      
      SUPGIDS = Supp Groups IDs     
      SUPGRPS = Supp Groups Names
    

    1、系统信息统计

    前五行是系统整体状态的统计信息展示区域。下面分别介绍每一行中的内容:

    1.第一行显示服务器概况
    如下所示,第一行列出了服务器运行了多长时间,当前有多少个用户登录,服务器的负荷情况等,使用uptime命令能获得同样的结果。

    top - 20:29:20 up  1:24,    2 users,       load average: 0.00, 0.01, 0.02
         当前时间      运行时长    当前登录用户数    平均负载(1分钟、5分钟、15分钟)
    

    ==========>平均负载的三个数值我们该关注哪一个?三个值相当于三个样本,我们应该统筹地看
    1、如果1分钟,5分钟,15分钟的负载数值相差不大,代表系统的负载很'稳定′。
    2、如果1分钟的值,远小于15分钟的值,那么证明系统的平均负载逐渐降低,即我们的系统刚刚经历过大风浪,但目前已逐渐趋于平均。至于15分钟区间内,系统负载上升的原因,还需要我们认真查明3、如果15分钟的值,远小于1分钟的值,那么证明系统的平均负载逐渐升高,有可能是临时的也有可能持续上升,需要观察
    4、一旦1分钟的平均负载接近或超过了CPU的个数,就意味着,系统正在发生过载的问题,这时候就得分析问题了,并且要想办法优化。

    5、对于只有单核cpu的系统,1.0是该系统所能承受负荷的边界值,大于1.0则有处理需要等待。
    一个单核cpu的系统,平均负载的合适值是o.7以下。如果负载长期徘徊在1.0,则需要考虑马上处理了。超过1.0的负载,可能会带来非常严重的后果。
    当然,多核cpu的系统是在前述值的基础上乘以cpu内核的个数。如对于多核cpu的系统,有N个核则所能承受的边界值为N.0。

    Load Average
    平均负载 (load average) 是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。通过系统命令”w” 或”top”可以查看当前 load average 情况。
    第一位:表示最近1分钟平均负载;
    第二位:表示最近5分钟平均负载;
    第三位:表示最近15分钟平均负载。
    假设我们的系统是单CPU单内核的,把它比喻成是一条单向马路,把CPU任务比作汽车。当车不多的时候,load < 1;当车占满整个马路的时候 load = 1;当马路都站满了,而且马路外还堆满了汽车的时候,load > 1。
    我们经常会发现服务器Load > 1但是运行仍然不错,那是因为服务器是多核处理器。假设我们服务器CPU是2核,那么将意味我们拥有2条马路,我们的Load = 2时,所有马路都跑满车辆。
        0.7 < load < 1:此时是不错的状态,如果进来更多的汽车,你的马路仍然可以应付;
        load = 1:你的马路即将拥堵,而且没有更多的资源额外的任务,赶紧看看发生了什么吧;
        load > 5:非常严重拥堵,我们的马路非常繁忙,每辆车都无法很快的运行。
    通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。1分钟负载值 > 1,那么我们不用担心,但是如果15分钟负载都超过1,我们要赶紧看看发生了什么事情。所以我们要根据实际情况查看这三个值。
    

    可以使用如下命令来查看每个处理器的信息:

    cat / proc/ cpuinfo
    

    如果只想计算有多少个cpu内核,可以使用如下命令:

    cat / proc / cpuinfo l grep 'model name' / wc -l
    

    2.第二行Tasks任务运行概况:

    Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
    
    • total #任务数量总计

    • running #正在运行的

    • sleeping #睡眠状态的

    • stopped #停止的

    • zombie #僵尸进程

    3.第三行 CPU概览: %Cpu(s) 表示CPU使用百分比,按照时间占用计算,单位s

    %Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    

    us #用户态进程占用cpu时间的百分比
    sy #内核态进程占用cpu时间的百分比
    ni #代表优先被调度的进程占cpu时间的百分比
    id #cpu空闲的百分比
    wa #cpu等待io的百分比
    hi #硬件中断,处理硬件中断所占用CPU的时间
    si #软件中断,处理软件中断所占用CPu的时间
    st #被偷走的cpu,虚拟机占用物理机CPU的百分比
    4.第四行 KiB Mem内存概览(KB):

    KiB Mem :   995712 total,   252208 free,   404372 used,   339132 buff/cache
    

    total #物理内存总量
    used #使用的物理内存总量
    free #空闲内存总量
    buff/cache #用作内核缓存的内存量
    5.第五行 KiB Swap缓存区概况(KB):

    KiB Swap:  2097148 total,  2097148 free,        0 used.   431828 avail Mem
    

    total #交换区总量
    used #使用的虚拟缓存交换区总量
    free #空闲交换区总量
    avail Mem #有效的
    cached Mem #缓冲的交换区总量。

    2、进程(任务)区域状态监控

    第七行及以下显示了各进程(任务)的 状态监控。常用重要的列所代表的含义如下:

    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 PID 进程id
    2 PPID 父进程id
    3 RUSER 真正的用户名
    4 UID 进程所有者的用户id
    5 USER 进程所有者的用户名
    6 GROUP 进程所有者的组名
    7 TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
    8 PR 优先级
    9 NI nice值。负值表示高优先级,正值表示低优先级
    10 P 最后使用的CPU,仅在多CPU环境下有意义
    11 %CPU 上次更新到现在的CPU时间占用百分比
    12 TIME 进程使用的CPU时间总计,单位秒
    13 TIME+ 进程使用的CPU时间总计,单位1/100秒
    14 %MEM 进程使用的物理内存百分比
    15 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    16 SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
    17 RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    18 CODE 可执行代码占用的物理内存大小,单位kb
    19 DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    20 SHR 共享内存大小,单位kb
    21 nFLT 页面错误次数
    22 nDRT 最后一次写入到现在,被修改过的页面数。
    23 S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
    24 COMMAND 命令名/命令行
    25 WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
    26 Flags 任务标志,参考 sched.h
  • 相关阅读:
    mysql--SQL编程(关于mysql中的日期) 学习笔记2
    mysql--SQL编程(基础知识) 学习笔记1
    Geocoding java调用百度地图API v2.0 图文 实例( 解决102错误)
    java unicode转码为中文 实例
    spring hiberante 集成出现异常 java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor
    [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
    [Spring学习笔记 6 ] Spring JDBC 详解
    ubuntu 连接windows远程桌面 &&rdesktop 退出全屏模式
    maven Missing artifact com.sun:tools:jar:1.5.0
    mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
  • 原文地址:https://www.cnblogs.com/bbdbolg/p/13929592.html
Copyright © 2011-2022 走看看