Linux ❉ top命令详解

一 介绍

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

二 语法

[root@192 ~]# 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: 显示帮助或者版本信息
-c: 命令行列显示程序名以及参数
-d: 启动时设置刷新时间间隔(当然用户可以使用s交互命令来改变之)
-H: 设置线程模式
-i: 只显示活跃进程
-n: 显示指定数量的进程
-p: 显示指定PID的进程
-u: 显示指定用户的进程
-q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
-S:指定累计模式。
-s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

常用命令说明

Ctrl+L:擦除并且重写屏幕

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

三 视图参数

[root@192 ~]# top
top - 10:37:53 up  3:12,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 188 total,   1 running, 187 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.6 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4026164 total,  3024444 free,   482124 used,   519596 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  3293896 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
     1 root      20   0  191272   4200   2588 S   0.0  0.1   0:02.61 systemd         
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.11 kthreadd        
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H    
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0     
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/0     
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh          
     9 root      20   0       0      0      0 S   0.0  0.0   0:02.70 rcu_sched       
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain  

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

1 视图参数详解

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

top - 10:37:53 up  3:12,  3 users,  load average: 0.00, 0.01, 0.05
  • 10:37:53:当前系统时间。
  • up  3:12,:操作系统从开机后运行的时间,运行天时分。
  • users:当前系统三个用户登录在线。
  • load average:1,5,15min的系统平均负载。如果第四组数字,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID。
监控项名称监控项含义单位
Host.load1过去1分钟的系统平均负载
Host.load5过去5分钟的系统平均负载
Host.load15过去15分钟的系统平均负载

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

 (2)第二行,Tasks — 任务(进程)

Tasks: 188 total,   1 running, 187 sleeping,   0 stopped,   0 zombie
  • total:系统当前运行进程数。
  • running:当前运行的进程数。
  • sleeping:睡眠中的进程数。
  • stopped:停止
  • zombie:僵尸进程

(3)第三行,cpu状态信息

%Cpu(s):  0.0 us,  1.6 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us:用户空间占用cpu时间百分比,如果是多核,这个数值表示占用的平均百分比,可以按1进行多核统计和平均统计切换。
  • sy:内核空间占用cpu时间百分比,后续同上。
  • ni:用户空间改变过优先级的进程占用cpu时间百分比。
  • id:空闲时间占用cpu的百分比。
  • wa:等待输入输出占用cpu时间百分比。
  • hi:硬中断占用cpu时间百分比。
  • si:软中断占用cpu时间百分比。
  • st:实时
监控项名称监控项含义单位说明
Host.cpu.idle当前空闲CPU百分比%当前CPU处于空闲状态的百分比
Host.cpu.system当前内核空间占用CPU百分比%指系统上下文切换的消耗,该监控项数值比较高,说明服务器开了太多的进程或者线程
Host.cpu.user当前用户空间占用CPU百分比%用户进程对CPU的消耗
Host.cpu.iowait当前等待IO操作的CPU百分比%该项数值比较高说明有很频繁的IO操作
Host.cpu.other其他占用CPU百分比%其他消耗,计算方式为(Nice + SoftIrq + Irq + Stolen)的消耗
Host.cpu.totalUsed当前消耗的总CPU百分比%指以上各项CPU消耗的总和,通常用于报警

 什么是软中断呢?

        软中断和硬中断都有一个共同的特点,都会中断当前操作,但是呢又有所区别,软中断当在进行一个任务的时候来了一个新的任务,就将先停止当前的任务,然后立马将新的任务放入内存当中,延迟处理新任务,最后此 任务交由线程来进行处理。
​ 为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断 (softirq)来完成。

什么是硬中断呢

        同样在执行一个进程的时候,又有新的任务请求访问,cpu会立马对当前进程进行处理,但是呢新的进程只能处于等待,等待上进程结束之后,才能对新进程进行处理
        由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统,系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

 (4)第四行,内存状态(KB)

KiB Mem :  4026164 total,  3024444 free,   482124 used,   519596 buff/cache

(5)swap交换分区信息(KB)

KiB Swap:  4063228 total,  4063228 free,        0 used.  3293896 avail Mem 
  • total:交换区总量。
  • free:空闲交换区数量。
  • used:使用交换区数量。
  • cached:缓冲的交换区总量(示例中没开启,意会意会)

备注:

可用内存=free + buffer + cached

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,

第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

 (6)空行

(7)第七行以下:各进程(任务)的状态监控

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND         
     1 root      20   0  191272   4200   2588 S   0.0  0.1   0:02.61 systemd         
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.11 kthreadd        
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H    
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0     
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/0     
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh          
     9 root      20   0       0      0      0 S   0.0  0.0   0:02.70 rcu_sched       
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain  
  • 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 — 进程名称(命令名/命令行)

详解

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键可以显示出来。
  2. 真正的该程序要求的数据空间,是真正在运行中要使用的。

(8)全称信息查看

top命令进入视图,f键可查看全称信息,再按q可退出回到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             USED    = Res+Swap Size (KiB) 
* USER    = Effective User Name    nsIPC   = IPC namespace Inode 
* PR      = Priority               nsMNT   = MNT namespace Inode 
* NI      = Nice Value             nsNET   = NET namespace Inode 
* VIRT    = Virtual Image (KiB)    nsPID   = PID namespace Inode 
* RES     = Resident Size (KiB)    nsUSER  = USER namespace Inode
* SHR     = Shared Memory (KiB)    nsUTS   = UTS namespace Inode 
* S       = Process Status      
* %CPU    = CPU Usage           
* %MEM    = Memory Usage (RES)  
* TIME+   = CPU Time, hundredths
* 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   
  TGID    = Thread Group Id     
  ENVIRON = Environment vars    
  vMj     = Major Faults delta  
  vMn     = Minor Faults delta  

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值