Linux-top命令学习

一、前言

  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<进程号> 显示指定进程,也即是监控特定的PID
top -n<次数> 循环显示的次数  -n 2 表示更新两次后终止更新显示
top -H 线程模式操作,表示top以单个线程的模式进行展示,不使用该选项,则是每个进程中所有线程的总和显示

三、实例

同样,我们结合实例来学习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.1. 第一行
  • 任务队列信息:15:59:17,当前系统时间;up 18 min,系统已经运行了多长时间(在此期间系统没有重启过),这里表示系统已经运行了18分钟;
  • 2 users,表示当前用户登录的数量是2;
  • load average: 0.52, 0.67, 0.47,load average,平均负载,表示CPU的负载能力;这三个参数分别是1分钟,5分钟,15分钟的负载情况,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值;
    • 如果你的机器有一个单核CPU,那么平均负载是1就意味着机器满载的,并且有足够的能力在采样时间内完成任务。同样地,如果平均负载是2,那对单核的CPU是超载的,并需要2个可用内核才能在同样的采样时间内完成的要求的任务;
    • 使用的时候,我们可以在top命令下先按下1,然后看下CPU的核数,然后快速计算下负载;
1.2. 第二行

  任务进程:Tasks: 214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie,当前系统共有214个进程,其中处于运行的有1个,213个线程在休眠,stop状态的有0个,zombie状态的线程有0个;

1.3. 第三行

**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.4. 第四行

  内存状态,KiB Mem:3823720 total, 1261872 free, 921608 used, 1640240 buff/cachetotal, 物理内存总量;free,空闲内存总量;used,使用中的内存总量;buff/cache,缓存的内存总量,单位都是KB;

1.5. 第五行

  swap交换分区信息,KiB Swap: 4063228 total, 4063228 free, 0 used. 2504904 avail Memtotal,交换区总量;used,使用的交换区总量;free,空闲交换区总量;avail Mem,可用交换区总量;

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

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

top命令默认在一个特定间隔(5秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。
另外,这里再简单说下:

  • top针对%CPU的展示有两种模式,Irix modeSolaris mode,默认展示的是Irix mode;两种模式的区别,简单来说就是Irix mode 计算的是占用总CPU核数的百分比,如果进程启用了多线程占用了多个核心,该值可能会超过100%,但不会超过总核数*100;而Solaris mode表示计算的是单个CPU内核的平均百分比,也就是总的CPU百分比除以CPU总核数;而我们可以通过交互式命令 I 来进行两种模式的切换,也就是shift+i;

另外可以看下man top中的简介:

k: %CPU -- CPU usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command.

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

  如果不按1的话,top视图展示的是所有cpu的平均值。按完1之后,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 + < 可以向右或左改变排序列:

另外,可以通过Shift+p 按照cpu排序,Shift+m 按照内存排序;

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命令查看内存及多核CPU的使用讲述

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容