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 的结果输出到档案内
目录
相关文章
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
161 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
639 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
110 3
|
2月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
92 2
|
1月前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
60 14
Linux 10 个“who”命令示例
|
12天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
38 8
|
21天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
116 20
|
22天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
52 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
40 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解