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
posted @ 2020-11-05 00:51  只有时间是永恒  阅读(455)  评论(0编辑  收藏  举报