Linux 基础之 TOP 命令详解

简介: 【2月更文挑战第10天】Linux 基础之 TOP 命令详解

一、前言

TOP 命令是 Linux 常用的性能分析工具,能够实时显示系统中各个进程资源占用状况,类似于 Windows 的任务管理器。

二、Top说明

当使用一个工具时,对此最快的了解方式就是查看说明,那就是"man"。在此也不例外。

man top

通过上面的命令,可以看到下面的输出信息,这里只把最上面的 5 行信息中主要的给出了说明:

2. SUMMARY Display            
Each of the following three areas are individually controlled through one or more interactive commands.  See topic 4b. SUMMARY AREA            
Commands for additional information regarding these provisions.            

2a. UPTIME and LOAD Averages            
This portion consists of a single line containing:            
program or window name, depending on display mode            
current time and length of time since last boot            
total number of users            
system load avg over the last 1, 5 and 15 minutes            

2b. TASK and CPU States            
This portion consists of a minimum of two lines.  In an SMP environment, additional lines can reflect individual CPU state percent?            
ages.            

Line 1 shows total tasks or threads, depending on the state of the Threads-mode toggle.  That total is further classified as:            
running; sleeping; stopped; zombie            

Line 2 shows CPU state percentages based on the interval since the last refresh.            

As  a  default, percentages for these individual categories are displayed.  Where two labels are shown below, those for more recent            
kernel versions are shown first.            
us, user    : time running un-niced user processes            
sy, system  : time running kernel processes            
ni, nice    : time running niced user processes            
id, idle    : time spent in the kernel idle handler            
wa, IO-wait : time waiting for I/O completion            
hi : time spent servicing hardware interrupts            
si : time spent servicing software interrupts            
st : time stolen from this vm by the hypervisor

我们再来看一下具体输出:
在这里插入图片描述

第一行是任务队列信息,同uptime命令的执行结果。

19:15:01 #系统当前时间
up 85 days, 4:45, #系统运行时间,格式为 天,时:分
10 users, #当前登录用户数
load average: 17.94, 31.84, 38.98 #系统负载,即任务队列的平均长度。三个值分别为 1分钟,5分钟,15分钟前到现在的平均值。这里的Load指的出于R(running)和D(Uninterruptible sleep)的两种状态下的进程数,换句话说就是”运行状态或不可中断的状态“

对于这个 “load average” 理解为可以用下面一段图上的解释觉得是非常贴切的。
image.png

即在单核cpu情况下,load average 为1,表示cpu利用率为100,load average 为0.5的表示,其cpu利用率只有50%,load average为1.7说明,cpu已经超负荷 70%.

在多核 cpu 的机器上,需要将以上的1分钟/5分钟/15分钟的负载值除以对应的cpu核数,才好评估对应的 cpu 的负载情况。
在这里插入图片描述

比如,这个 cpu 为8核的机器上,其 cpu 过去一分钟的利用率只有 17.94/8=2.2425,说明 cpu 使用率已经超负荷了约124%

可以使用以下方法查看服务上cpu是几核:

[root@am ~]# cat /proc/cpuinfo |grep processor |wc -l            
8

第二行:进程信息:

Tasks: #进程信息
439 total, #进程总数
1 running, #正在运行的进程数
437 sleeping, #睡眠的进程数
1 stopped, #停止的进程数
0 zombie # 僵尸进程数,一个parent的许多child都已经退出,但Parent还存在,且没有获取到child的状态之前的进程状态。

第三行:CPU信息

%Cpu(s):
84.7 us, #用户空间占用CPU百分比
7.6 sy, #内核空间占用CPU百分比
0.0 ni, #cpu的优先级,数据越高,说明越nice,在CPU调试时,nice越高的优先级越低,nice越低优先级越高。ni表示cpu在手动设置nice值的进程上执行所花的时间。
7.6 id, #空闲CPU百分比
0.0 wa, #等待输入输出的CPU时间百分比
0.0 hi, #硬件CPU中断占用百分比
0.0 si, #软中断占用百分比
0.0 st #虚拟机占用百分比,如果操作系统上部署的有虚拟机,那cpu会被虚拟机占用一定资源。此时,即便有其它进程需要资源,cpu也无法予以分配。相当于cpu资源给偷走了,所以st表示被偷走的时间,steal time.

第四行:内存信息

KiB Mem :
16265968 total, #物理内存总量
2337516 free, #空闲内存总量
12155956 used, #使用的物理内存总量
1772496 buff/cache #用作内核缓存的内存量

第五行:交换内存

KiB Swap:
8257532 total, #交换区总量
3308284 free, #空闲交换区总量
4949248 used. #使用的交换区总量
3446900 avail Mem #是创建新进程时,在不使用swap分区的情况下,能够分配的内存大小。这个大小可能比当前的free还大,这是因为buff/cache中的内存的创建进程时,若需要,也是可以抢占过来的。

任务区:

PID #进程id
USER #用户
PR #优先级
NI #nice值。负值表示高优先级,正值表示低优先级
VIRT #进程使用的虚拟内存总量
RES #进程使用的、未被换出的物理内存大小,单位kb.
SHR #共享内存大小,单位kb
S #进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
%CPU #使用CPU占用百分比
%MEM #进程使用物理内存百分比
TIME+ COMMAND #运行时间+命令名/行

进程排序

按以下大写字母,分别按不同的维度进行排序:

  • M 根据内存使情况排序
  • P 根据CPU使用情况排序
  • N 根据进程ID排序
  • T 根据进程使用CPU的时间排序

在性能排查中常用的命令:

top -H #默认显示进程的运行情况,在top命令执行后,按大写的H,可进入线程执行情况页面,再按一次H则会到进程展示。
top -c #在执行后,按小c,则能够展示进程路径,并且对内核进程的名称(command列),加上方括号。再按c切换回去
top -u root #在执行启动后,按小写u,在输入框中输入对应的用户名来过滤用户。
top 启动后,输入小k ,后面加pid 可以直接杀进程。

如何基于进程id,或程序名来查看资源占用情况:

ps aux |grep processName  #找到对应进程pid            
top -c -p pid  #过滤查看进程的资源占用情况

基于表达式过滤进程:

在top启动后,按大O,进入到过滤表达式的输入框。表达式有以下几种类型:

COMMAND=getty #过滤条件命令行等于getty的显示
!COMMAND=getty #过滤条件命令行不等于getty的显示
%CPU>3.0 #CPU使用率超过3%的显示

其他:

top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

参数说明:

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
  • S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
目录
相关文章
|
8天前
|
Web App开发 Linux 网络安全
工作中常用到的Linux命令
工作中常用到的Linux命令
|
8天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
5天前
|
NoSQL Linux Shell
常用的 Linux 命令
常用的 Linux 命令
27 9
|
1天前
|
网络协议 Ubuntu Linux
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载
|
1天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
31 0
|
4天前
|
缓存 运维 监控
Linux系统监控利器:探索常用命令及数据保存技巧
Linux系统监控利器:探索常用命令及数据保存技巧
23 4
Linux系统监控利器:探索常用命令及数据保存技巧
|
7天前
|
Linux 索引
linux 文件查找 和文件管理常用命令
linux 文件查找 和文件管理常用命令
17 0
|
7天前
|
安全 Unix Linux
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
13 0
|
9天前
|
Prometheus 监控 Cloud Native
【Linux】查看系统内存命令(详细讲解)
【Linux】查看系统内存命令(详细讲解)
|
9天前
|
监控 Linux