49. shell命令--top
功能说明
top 命令是 Linux 和 UNIX 系统上常用的性能分析工具,它可以实时显示系统中各个进程的资源占用情况,包括 CPU、内存等。使用 top 命令可以帮助系统管理员快速诊断系统性能瓶颈,监控进程活动。
top 命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。运维工程师们常常会把 top 命令比作“加强版的 Windows 任务管理器”,因为除了能看到常规的服务进程信息之外,还能够对处理器和内存的负载情况一目了然,实时感知系统全局的运行状态。top 命令非常适合作为接手服务器后执行的第一条命令。
语法格式
SYNOPSIS
top -hv|-bcHiOSs -d secs -n max -u|U user -p pid -o fld -w [cols]
The traditional switches `-' and whitespace are optional.
选项说明
-d <秒数>:指定 top 命令的刷新时间间隔,单位为秒。
-n <次数>:指定 top 命令运行的次数后自动退出。
-p <进程ID>:仅显示指定进程ID的信息。
-u <用户名>:仅显示指定用户名的进程信息。
-H:在进程信息中显示线程详细信息。
-i:不显示闲置(idle)或无用的进程。
-I:忽略失效过程;
-b:以批处理(batch)模式运行,直接将结果输出到文件。
-c:显示完整的命令行而不截断。
-s:保密模式;
-S:累计显示进程的 CPU 使用时间。
top交互命令
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
实践操作
1. 显示进程信息
top
top - 12:14:27 up 4:02, 1 user, load average: 0.00, 0.01, 0.03
Tasks: 99 total, 2 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2030168 total, 1792920 free, 104264 used, 132984 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1766296 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
总体系统信息:
# uptime:系统的运行时间和平均负载。
# tasks:当前运行的进程和线程数目。
# CPU:总体 CPU 使用率和各个核心的使用情况。
# 内存(Memory):总体内存使用情况、可用内存和缓存。
系统信息:
top -
# [12:14:27]-->[当前系统时间]
# [up 4:02]-->[系统已经运行时间]
# [1 user]-->[用户当前登录数量]
# [load average: 0.00, 0.01, 0.03]-->[系统负载,即任务队列的平均长度]
Tasks:
# [99 total]-->[总进程数]
# [2 running]-->[正在运行的进程数]
# [97 sleeping]-->[睡眠的进程数]
# [0 stopped]-->[停止的进程数]
# [0 zombie]-->[冻结进程数]
%Cpu(s)
# [0.0 us]-->[用户空间占用CPU百分比]
# [0.0 sy]-->[内核空间占用CPU百分比]
# [0.0 ni]-->[用户进程空间内改变过优先级的进程占用CPU百分比]
# [100.0 id]-->[空闲CPU百分比]
# [0.0 wa]-->[等待输入输出的CPU时间百分比]
# [0.0 hi]-->[硬件中断的处理时间百分比]
# [0.0 si]-->[软件中断的处理时间百分比]
# [0.0 st]-->[可能表示被虚拟机偷走的CPU时间百分比]
KiB Mem :
# [2030168 total]-->[物理内存总量]
# [1792920 free]-->[空闲内存总量]
# [104264 used]-->[使用的物理内存总量]
# [132984 buff/cache]-->[用作内核缓存的内存量]
KiB Swap:
# [2030168 total]-->[交换区总量]
# [1048572 free]-->[空闲交换区总量]
# [0 used]-->[使用的交换区总量]
# [1766296 avail Mem]-->[缓冲的交换区总量]
进程信息:
# PID:进程的标识符。
# USER:运行进程的用户名。
# PR(优先级):进程的优先级。
# NI(Nice值):进程的优先级调整值。
# VIRT(虚拟内存):进程使用的虚拟内存大小。
# RES(常驻内存):进程实际使用的物理内存大小。
# SHR(共享内存):进程共享的内存大小。
# %CPU:进程占用 CPU 的使用率。
# %MEM:进程占用内存的使用率。
# TIME+:进程的累计 CPU 时间。
# COMMAND:进程的名称。
2. 以默认格式显示系统运行信息,但提供完整的进程路径及名称
top -c
3. 以批处理模式显示程序信息
top -b
4. 以累积模式显示程序信息
top -S
5. 设置信息更新次数
top -n 2 #表示更新两次后终止更新显示
6. 设置信息更新时间
top -d 3 #表示更新周期为3秒
7. 显示指定的进程信息
top -p 1 #显示进程号为 1 的进程信息,CPU、内存占用率等
8. 使用者将不能利用交谈式指令来对行程下命令
top -s
输出详解
top 命令的输出通常分为几个部分
1.顶部区域:显示系统整体的运行信息,
包括系统时间、运行时间、登录用户数、平均负载等。平均负载是指在特定时间间隔内,系统处于可运行状态和不可中断状态的平均进程数,它反映了系统的繁忙程度。
2.中部区域:这是 top 命令输出的核心部分,列出了系统中各个进程的详细情况。通常包括以下几个列:
- PID:进程ID,每个进程都有一个唯一的ID号。
- USER:运行该进程的用户名。
- PR:进程优先级,数值越小,优先级越高。
- NI:nice值,用于调整进程的优先级,正值表示降低优先级,负值表示提高优先级。
- VIRT:虚拟内存使用量,表示进程占用的虚拟内存总量,包括进程使用的物理内存和交换空间。
- RES:常驻内存大小,表示进程当前占用的物理内存量(不包括交换出的部分)。
- SHR:共享内存大小,表示进程占用的共享内存量。
- S:进程状态,如S表示睡眠状态,R表示运行状态等。
- %CPU:该进程占用的CPU百分比。
- %MEM:该进程占用的物理内存百分比。
- TIME+:该进程自启动以来的CPU时间总和,格式为分钟:秒。
- COMMAND:启动该进程的命令行名称或命令名。
- 底部区域:提供了一些交互命令和统计信息,允许用户根据需要调整 top 命令的输出或进行其他操作。例如,可以通过按 f 键进入字段管理界面,选择或取消显示特定的列;按 M 键将进程列表按内存使用率排序;按 P 键则按CPU使用率排序。
此外,top 命令还支持一些命令行选项,以便用户根据需求定制输出。例如,-n 选项允许用户指定 top 命令运行的次数后自动退出;-u 选项用于仅显示指定用户的进程;-p 选项允许用户指定要监控的特定PID列表。
通过熟练使用 top 命令及其选项,系统管理员可以高效地监控和分析系统性能,及时发现并解决潜在的性能瓶颈问题。同时,top 命令也是学习 Linux 和 UNIX 系统管理时不可或缺的工具之一。
在深入探讨 top 命令的应用之前,值得一提的是,它作为一个实时更新的界面,为系统管理员提供了宝贵的动态监控视角。通过定期刷新显示的数据(默认是每三秒更新一次,但可以通过 -d 选项自定义刷新间隔),top 命令能够捕捉到系统性能随时间变化的细微差别。
监控系统性能的关键指标
- 系统时间与运行时间
:这部分信息帮助用户了解系统已经运行了多久,以及当前的日期和时间,对于诊断与时间相关的问题(如定时任务未按预期执行)特别有用。
- 登录用户数
:显示当前登录到系统的用户数量,这有助于评估系统的并发使用情况,特别是在多用户环境下。
- 平均负载
:这是评估系统负载水平的关键指标。它不仅考虑了CPU的繁忙程度,还考虑了等待CPU处理的进程数。通过比较不同时间间隔(1分钟、5分钟、15分钟)的平均负载值,管理员可以快速识别系统负载的变化趋势,并据此采取相应的优化措施。
进程信息的深度解读
- PID与USER
:PID是进程的唯一标识符,而USER则指出了启动该进程的用户。这有助于识别哪些用户正在运行哪些进程,以及在需要时能够定位到具体的用户进行进一步的管理或沟通。
- 优先级(PR与NI)
:理解进程的优先级对于优化系统性能至关重要。PR代表进程的基本优先级,而NI则允许用户通过nice值来调整进程的优先级。通过降低高负载进程的nice值或增加低优先级进程的nice值,管理员可以更有效地分配系统资源。
- 内存使用(VIRT、RES、SHR)
:这些指标提供了进程内存使用的全面视图。VIRT反映了进程可能使用的最大内存量(包括交换空间),而RES则显示了当前实际占用的物理内存量。SHR部分显示了与其他进程共享的内存量,这有助于理解内存使用的效率。
- 进程状态(S)
:不同的状态码(如S表示睡眠,R表示运行)提供了进程当前行为的快照。通过观察状态的变化,管理员可以识别出哪些进程可能因资源竞争而处于等待状态,从而采取相应措施减轻系统负担。
交互操作
1.帮助:h
首先,我们可以用 h 或者 ? 显示交互命令的帮助菜单
2.刷新显示:回车或空格
top命令默认在一个特定间隔(3秒)后刷新显示。要手动刷新,用户可以输入回车或者空格
3.切换交替显示模式:大小字母 A
这个命令在全屏和交替模式间切换。在交替模式下会显示4个窗口(译注:分别关注不同的字段)
- Def (默认字段组)
- Job (任务字段组)
- Mem (内存字段组)
- Usr (用户字段组)
这四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。4个窗口中只有一个窗口是当前窗口。当前窗口的名称显示在左上方。(译注:只有当前窗口才会接受你键盘交互命令)
- 我们可以用 a 和 w 在4个 窗口间切换。
- a 移到后一个窗口, w 移到前一个窗口。
- 用 g 命令你可以输入一个数字来选择当前窗口。
4.触发粗体显示:大小字母 B
一些重要信息会以加粗字体显示。这个命令可以切换粗体显示
5.设置显示的刷新间隔: d 或 s
当按下 ’d’ 或 ’s’ 时,你将被提示输入一个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这里输入了1,top将会每秒刷新。
6.切换负载、任务、内存信息的显示:l、t、m(一直按l键,t键和m键)
这会相应地切换顶部的平均负载、任务/CPU状态和内存信息的概况显示。
7.字段管理:f
用于选择你想要显示的字段。用 ’*’ 标记的是已选择的
管理显示列:上下光标键在字段内导航,左光标键可以选择字段,回车或右光标键确认。
8.反向排序:R
切换反向/常规排序。
9.触发命令:c
切换是否显示进程启动时的完整路径和程序名。
10.空闲任务:i
切换显示空闲任务。
11.树视图:V
切换树视图。
12.改变配色:Z
按下 Z 向用户显示一个改变top命令的输出颜色的屏幕。可以为 8 个任务区域选择8种颜色。
13.彩色显示:z
切换彩色,即打开或关闭彩色显示。
14.切换高亮信息: x 或者 y
x 将排序字段高亮显示(纵列);y 将运行进程高亮显示(横行)。依赖于你的显示设置,你可能需要让输出彩色来看到这些高亮。
15.特定用户的进程:u
显示特定用户的进程。你会被提示输入用户名。空白将会显示全部用户。
16.任务的数量:n 或 #
设置最大显示的任务数量
17.结束任务:k
top 命令中最重要的一个命令之一。用于发送信号给任务(通常是结束任务)。
18.重新设置优先级:r
重新设置一个任务的调度优先级。