2

Linux运维命令 —— top

 2 years ago
source link: https://yanzhongsino.github.io/2022/05/02/linux_operation.and.maintenance_top/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

top 用于交互式监控Linux上动态实时进程,按线程数从大到小排序。

1. top的输出

在shell终端输入top回车,就可以查看许多系统运行的实时信息。如下图所示:

linux_command.top.default.jpg?raw=true

Figure 1. top默认输出示例

top的默认输出包含两个区域:水平信息的汇总区(红框部分)和垂直信息的任务区(蓝框部分)。汇总区显示有关进程和资源使用情况的统计信息,而任务区显示当前正在运行的所有进程的列表。

下面一一说明各个参数的含义:

1.1. 汇总区

汇总区共有5行。

  1. 第一行:任务队列信息。同uptime命令输出一致。
显示 含义
top - 15:30:36 系统当前时间(system time)
up 29 days, 54 min 系统运行时长(uptime)
7 users 当前登录的用户/会话数量(user sessions)
load average: 4.92, 4.90, 4.96 系统平均负载,即任务队列的平均长度。三个数值分别为1min,5min,15min前到现在的平均值
  1. 第二行:任务进程信息 Tasks
显示 含义
498 total 进程总数
3 running 正在运行的进程数
316 sleeping 睡眠状态的进程数
0 stopped 停止状态的进程数
0 zombie 僵尸状态的进程数
  1. 第三行:CPU信息 %Cpu(s)。如果有多个CPU,可能会有多行,每行单独显示一个CPU。
显示 含义
6.1 us 用户空间占用CPU百分比
0.2 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
93.7 id 空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi 硬件CPU中断占用百分比
0.0 si 软中断占用百分比
0.0 st 虚拟机占用百分比
  1. 第四行:内存信息 KiB Mem
显示 含义
33012627+total 物理内存总量
93989232 free 空闲内存总量
27405860 used 使用的物理内存总量
20873120+buff/cache 用作内核缓存的内存量
  1. 第五行:交换区信息 KiB Swap
显示 含义
63998972 total 交换区总量
63280912 free 空闲交换区总量
718060 used 使用的交换区总量
30034761+avail Mem 缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入

1.2. 任务区

任务区每行代表一个进程的信息。

这里把每一列的含义列在这里:

序号 列名 含义
1 PID 进程id,即标识进程的唯一的身份证号
2 PPID 父进程id
3 RUSER 真实用户名Real user name
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

2. top的交互命令

当使用top命令显示汇总区和任务区后,还可以使用交互命令进行特定显示。

2.1. 常用交互命令

  1. q:退出程序
  • 要退出程序,可以按键盘上的“q”。
  1. 上下箭头键/PgUp和PgDn键:任务区的翻页
  2. f/F:字段/列管理
  • 默认情况下任务区仅显示部分字段/列: PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 。
  • 通过 f/F 键可以显示任务区所有列的列表,被激活的字段会标记星号(*)并粗体显示。
  • 字段/列的添加或删除:上下箭头键来移动到字段,空格键进行选中或去粗选中。
  • q退出界面。
  1. h或者?:显示交互命令的帮助界面
  2. k:终止一个进程
  • 系统将提示输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
  • 一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  1. u:显示特定用户的进程
  • 系统将提示输入用户名(留空代表所有用户),回车后即可显示指定用户的进程。
  1. r:即renice,改变一个进程的优先级别(NI值)
  • 系统提示用户输入需要改变的进程PID(默认是第一个PID进程),然后提示输入需要改变的进程优先级值(NI值,一般修改前为0),在已有NI值上加上这个输入值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  • 试了下,输入正值(优先级降低)可以生效,输入负值(优先级升高)显示Permission denied。
  1. s:改变两次刷新之间的延迟时间
  • 系统将提示用户输入新的时间,单位为秒(s)。如果有小数,就换算成毫秒(ms)。输入0值则系统将不断刷新,默认值是3s。
  • 需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  1. o或者O:激活流程过滤
  • 系统会提示输入过滤器表达式,回车后只显示符合表达式的进程。
  • 过滤器表达式是指定属性和值之间关系的语句。示例:COMMAND=getty: 过滤 COMMAND 属性中包含“getty”的进程,!COMMAND=getty: 过滤 COMMAND 属性中没有“getty”的进程,%CPU>3.0:过滤 CPU 使用率超过 3% 的进程
  • 清除添加的任何过滤器,按”=”。
  1. W:保存当前设置到~/.toprc设置文件中
  • 如果对top的输出做了任何更改,可以将当前设置写入~/.toprc文件中以供以后使用。

2.2. 切换显示内容

  1. l:切换显示平均负载和启动时间信息(汇总区第一行)。
  2. t:切换显示进程和CPU状态信息(汇总区第二、三行),共四种视图。
  3. m:切换显示内存信息(汇总区第四、五行),共四种视图。
  4. c:切换显示命令名称和绝对路径的完整命令行。
  5. z:以红色突出显示正在运行的进程的开关。
  6. i:忽略空闲,睡眠和僵死进程的开关。
  7. R:任务区默认降序排列,切换到升序排列的开关。
  8. S:切换累计时间模式的开关。
  9. 1:数字1为切换 汇总区第三行CPU信息的两种显示方式,总CPUs信息或者单个CPU信息。
  • 也可以用这个方式确定服务器的逻辑CPU数量。
  • 但当系统的CPU数量过多(比如超过36)无法显示全部逻辑CPU信息,还没找到怎么翻页。
  • 所以最好还是用cat /proc/cpuinfo| grep "processor"| wc -l命令查看当前系统的逻辑CPU数量。
  1. H:任务区的进程显示切换为线程显示。
  2. V:在正常显示和父子级层次结构显示间切换。

2.3. 排序任务区

  1. M:根据驻留内存大小排序任务区。
  2. P:根据CPU利用率排序任务区。
  3. T:根据运行累计时间排序任务区。
  4. N:根据进程ID排序任务区。

3. top的常用参数

top命令的常用参数中许多都可以在交互式命令中实现。

top命令的常用参数:top [-] [d] [p] [q] [c] [C] [S] [s] [n]

  1. -d 5:延迟时间,指定每两次屏幕信息刷新之间的时间间隔为5秒。
  2. -p 51524:通过指定进程ID(PID)来仅仅监控某个进程的状态,可用多个-p PID来指定多个进程ID。
  3. -u username:显示特定用户的进程。
  4. -q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  5. -S:打开累计时间模式。
  6. -s:打开安全操作模式。安全模式下用户无法更改和杀死任务,这将避免交互命令所带来的潜在危险。
  7. -i:使top不显示任何闲置或者僵死进程。
  8. -c:显示绝对路径命令行而不只是显示命令名。
  9. -o %CPU:任务区按CPU使用率对进程进行降序排列显示。除了CPU使用率,还支持所有其他属性值。
  10. -b:批处理模式。批处理模式程序基本上允许您将 top 命令输出结果发送到文件或其他程序。它将主要用于编写脚本和故障排除。
  11. -n 5:5个循环显示后自动退出top界面。

4. top的应用

top常用的运维应用案例

4.1. 通过平均负载(load average)评估系统运行状态

  1. 平均负载(load average)
  • 平均负载是指系统正在执行的计算工作占系统计算资源的比例。
  • 完全空闲的计算机的平均负载为 0,使用或等待 CPU 资源的每个正在运行的进程都会在平均负载上加 1。
  • 单CPU情况下,0代表空载,1代表满载,超过1即超载。
  • 单CPU情况下,良好的运行状况期望是平均负载在0-1之间,或不要超过1太多。
  1. 查看平均负载
  • top命令的汇总区的第一行中load average显示的三个数字即为1min,5min,15min前到现在的平均负载。这里的平均负载是所有CPU的总平均,还要根据CPU数量来计算单CPU平均负载。
  1. 查看逻辑CPU数量(processor数量)
  • cat /proc/cpuinfo| grep "processor"| wc -l可获得当前系统的逻辑CPU数量
  • lscpu列出的CPU(s)信息也是逻辑CPU数量
  1. 计算单CPU平均负载,评估系统运行现状
  • 假设top命令中平均负载值为54,系统CPU数量为36,单个CPU的平均负载为1.5(=54/24),代表系统过载率为50%(=54/36-1)。
  • 假设top命令中平均负载值为18,系统CPU数量为36,单个CPU的平均负载为0.5(=18/24),代表系统空闲率为50%(=1-18/36)。

即达到,可根据top命令的平均负载和CPU数量快速判断系统运行状态。

5. references


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK