美文网首页Shell和命令
Linux-top命令学习

Linux-top命令学习

作者: 骑着乌龟去看海 | 来源:发表于2018-06-18 15:46 被阅读70次

一、前言

  top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器,和它功能很像的一个命令是ps命令,但ps命令是静态的展示,也就是只展示某一时刻的进程情况。本文将来学习top命令的常用操作。

二、命令介绍

我们来看几个常用的参数:

top -c 显示进程完整的地址
top -I 忽略失效过程
top -s 保密模式
top -S 累积模式
top -d<秒数> 更新时间 -d 3 表示更新周期为3秒
top -i<时间> 设置间隔时间
top -u<用户名> 显示指定用户名
top -p<进程号> 显示指定进程
top -n<次数> 循环显示的次数  -n 2 表示更新两次后终止更新显示

三、实例

同样,我们结合实例来学习top命令。

1. 首先,我们看下默认情况下的top命令:
[mrzhang@192 ~]$ top

top - 15:59:17 up 18 min,  2 users,  load average: 0.52, 0.67, 0.47
Tasks: 214 total,   1 running, 213 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  1.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3823720 total,  1261872 free,   921608 used,  1640240 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2504904 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
 1513 root      20   0  288076  47052  22880 S   5.6  1.2   0:17.64 X           
 2097 mrzhang   20   0 2419744 126976  44664 S   4.0  3.3   0:41.45 gnome-shell 
 2752 mrzhang   20   0  708756  22852  14256 S   3.3  0.6   0:02.04 gnome-term+ 
 3229 mrzhang   20   0 1916704 142064  55376 S   2.7  3.7   0:46.67 Web Content 

前面五行是当前系统整体的统计信息,我们来挨个了解下:

  1. 第一行,任务队列信息:15:59:17,当前系统时间;up 18 min,系统已经运行了多长时间(在此期间系统没有重启过),这里表示系统已经运行了18分钟;2 users,表示当前用户登录的数量是2;load average: 0.52, 0.67, 0.47,后面这三个参数分别是1分钟,5分钟,15分钟的负载情况,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值,如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了;
  1. 第二行,Tasks,任务进程:214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie,当前系统共有214个进程,其中处于运行的有1个,213个线程在休眠,stop状态的有0个,zombie状态的线程有0个;
  1. 第三行,CPU状态信息:3.1 us, 1.0 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st,这里需要用户了解下Linux下的用户空间和内核空间:
    3.1 us — 当前用户进程(未调整优先级)占用CPU的百分比
    1.0 sy — 内核空间占用CPU的百分比。
    0.0 ni — 已调整过优先级的进程占用CPU的百分比
    95.9 id — 空闲CPU百分比
    0.0 wa — IO等待占用CPU的百分比
    0.0 hi — 硬件中断(Hardware IRQ)占用CPU的百分比
    0.0 si — 软件中断(Software Interrupts)占用CPU的百分比
    0.0 st (Steal Time),st 的全称是 Steal Time ,就是 Xen Hypervisor 分配给运行在其它虚拟机上的任务的实际CPU时间
  1. 第四行,内存状态,KiB Mem:3823720 total, 1261872 free, 921608 used, 1640240 buff/cachetotal, 物理内存总量;free,空闲内存总量;used,使用中的内存总量;buff/cache,缓存的内存总量,单位都是KB;
  1. 第五行,swap交换分区信息,KiB Swap: 4063228 total, 4063228 free, 0 used. 2504904 avail Memtotal,交换区总量;used,使用的交换区总量;free,空闲交换区总量;avail Mem,可用交换区总量;

后面的是进程的详细信息:

  1. PID,进程id;
  2. USER,进程所有者;
  3. PR,进程优先级;
  4. NI,nice值,负值表示高优先级,正值表示低优先级;
  5. VIRT,进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RES;
  6. RES,进程使用的、未被换出的物理内存大小,单位KB;
  7. SHR,共享内存大小,单位KB;
  8. S,进程状态,前文已经说过,D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程;
  9. %CPU,上次更新到现在的CPU时间占用百分比;
  10. %MEM,进程使用的物理内存百分比;
  11. TIME+,进程使用的CPU时间总计,单位1/100秒;
  12. COMMAND,进程名称(命令名/命令行);

top命令默认在一个特定间隔(5秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。

2. 监控每个CPU的运行情况

在top视图中,我们通过按键1 可监控每个CPU的运行情况:

Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.7 us,  1.4 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  1.4 us,  0.0 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3823720 total,  1100768 free,  1035412 used,  1687540 buff/cache

  top命令展示的是逻辑CPU的个数,也就是物理CPU * CPU对应的内核数,不过有可能由于Intel的超线程技术,最终逻辑CPU的个数可能还需要 * 2。如果我们想查看服务器CPU的信息,可以通过 /proc/cpuinfo 进行查看。
  这里我们可以看到我们的4个逻辑CPU的运行情况,再按1,将会返回top的基础视图。

3. 高亮显示当前运行线程

进行top基础视图后,点击键盘 b,可以看到我们当前的进程被高亮了。而y键则是控制开启或关闭正在运行的进程的加亮效果。

显示当前运行进程.png
4. 查看目前进程的排序字段

默认情况下,我们进入top视图时,是根据CPU的占有率进行排序的。我们可以使用键盘x 来打开或这关闭排序列的高亮效果,top的视图变化为:

top排序.png

可以看到,目前top的排序字段是%CPU;

5. 借助Shift键来改变排序列

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

666.png
6. 显示进程完整的地址

使用top -c显示进程完整的地址:

KiB Swap:  4063228 total,  4063228 free,        0 used.  2231600 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                         
 1513 root      20   0  299464  55468  27924 S   6.0  1.5   0:46.08 /usr/bin/X :0 -background none -noreset -audit+ 
 2097 mrzhang   20   0 2463300 156804  44756 S   5.6  4.1   2:00.73 /usr/bin/gnome-shell                            
 2752 mrzhang   20   0  721504  25020  15384 S   3.0  0.7   0:10.82 /usr/libexec/gnome-terminal-server              
 3229 mrzhang   20   0 2012160 209220  67728 S   2.0  5.5   2:13.94 /usr/lib64/firefox/plugin-container -greomni /+ 
 5650 mrzhang   20   0  157744   2376   1628 R   0.7  0.1   0:01.40 top -c      

小命令:在top视图中,可以使用shift + j或者j来控制左右对齐。

7. 显示进程信息的其他字段:

进入top视图后,我们点击f键,这时进入另一个视图,在这里可以设置基本视图中显示的字段:

Fields Management for window 1:Def, whose current sort field is PPID
   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             PGRP    = Process Group Id       vMj     = Major Faults delta  
* USER    = Effective User Name    TTY     = Controlling Tty        vMn     = Minor Faults delta  
* PR      = Priority               TPGID   = Tty Process Grp Id     USED    = Res+Swap Size (KiB) 
* NI      = Nice Value             SID     = Session Id             nsIPC   = IPC namespace Inode 
* VIRT    = Virtual Image (KiB)    nTH     = Number of Threads      nsMNT   = MNT namespace Inode 
* RES     = Resident Size (KiB)    P       = Last Used Cpu (SMP)    nsNET   = NET namespace Inode 
* SHR     = Shared Memory (KiB)    TIME    = CPU Time               nsPID   = PID namespace Inode 
* S       = Process Status         SWAP    = Swapped Size (KiB)     nsUSER  = USER namespace Inode
* %CPU    = CPU Usage              CODE    = Code Size (KiB)        nsUTS   = UTS namespace Inode 
* %MEM    = Memory Usage (RES)     DATA    = Data+Stack (KiB)    
* TIME+   = CPU Time, hundredths   nMaj    = Major Page Faults   
* COMMAND = Command Name/Line      nMin    = Minor Page Faults   
 PPID    = Parent Process pid     nDRT    = Dirty Pages Count   
  UID     = Effective User Id      WCHAN   = Sleeping in Function
  RUID    = Real User Id           Flags   = Task Flags <sched.h>
  RUSER   = Real User Name         CGROUPS = Control Groups      
  SUID    = Saved User Id          SUPGIDS = Supp Groups IDs     
  SUSER   = Saved User Name        SUPGRPS = Supp Groups Names   
  GID     = Group Id               TGID    = Thread Group Id     
  GROUP   = Group Name             ENVIRON = Environment vars    
[mrzhang@192 ~]$ 

前面加 * 号的表示是显示在基础视图中的,我们如果要显示或不显示某些字段,在选中字段上,敲击d即可实现。

8. 切换交替显示模式

进入top视图后,键入A,显示:

切换交替模式.png

  这里会展示类似4个窗口,窗口的左上角有4个选项:Def(默认字段组) ,Job (任务字段组),Mem(内存字段组),Usr(用户字段组),四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。我们可以使用aw来进行切换,a移动到后一个窗口,w移动到前一个窗口,用g命令可以输入一个数字来选择当前窗口。

四、top交互命令

在top的视图中,我们可以使用一些交换命令来帮助我们进行操作,这些命令都是单个英文字母,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。我们来了解下:

h  显示帮助画面,给出一些简短的命令总结说明
k  终止一个进程;
c  显示进程启动时的完整路径和程序名
i  切换显示空闲任务进程
q  退出程序
r  重新安排一个进程的优先级别
S  切换到累计模式
d或者s  设置显示的刷新间隔(单位为s),当敲下该键后,你会被提示输入一个值,然后这个设置的值将会作为刷新时间,输入0值则系统将不断刷新,默认值是5s
l  切换显示平均负载和启动时间信息
m  切换显示内存信息
t  切换显示进程和CPU状态信息
c  切换显示命令名称和完整命令行
A  切换交替显示模式
M  根据驻留内存大小进行排序
P  根据CPU使用百分比大小进行排序
T  根据时间/累计时间进行排序
W  将当前设置写入~/.toprc文件中 
B  粗体显示一些重要命令信息
R  反向排序
Z  改变颜色
f或F 从当前显示中添加或者删除项目
o或O 改变显示项目的顺序

到这,我们学习了top命令大部分的功能,如有需要,大家可以参考下面链接学习更多内容,另外,有兴趣的童鞋可以了解下htop命令。

本文参考自:
30个实例详解TOP命令
为什么 Linux 的 htop 命令完胜 top 命令
高效的使用 top

相关文章

网友评论

    本文标题:Linux-top命令学习

    本文链接:https://www.haomeiwen.com/subject/qiyneftx.html