详解 Linux top 命令

1. 写在前面

top(table of processes)命令是 Linux 下常用的性能分析工具,能够实时动态显示系统中各个进程的资源占用情况,包括 CPU 和内存使用情况,类似于 Windows 的任务管理器。

在本主要介绍,Linux 中的 top 命令。

2. top 命令语法和参数

通过命令行输入 top 以交互模式启动,显示活动进程和其他系统信息,可用使用选项支持自定义视图。

命令语法:

top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]

可用参数:

参数 说明
-h 显示命令帮助信息;
-v 显示版本与简要用法;
-b 以批处理模式启动 top,允许将命令输出发送到文件或其他程序。在批处理模式下 top不接受交互输入,直到命令退出或者达到指定的迭代限制;
-c 显示完整的命令行而不截断;
-d [secs.tenths] 指定 top 命令的刷新时间间隔,单位为秒;
-E ([k , m , g , t , p , e]) 切换内存和交换区单位;
-H 在进程信息中显示线程详细信息;
-i 不显示闲置(idle)或无用的进程;
-n 指定 top 命令运行指定次数后自动退出;
-o [field name] 指定字段对任务进程排序,”+”强制从高到低排序,”-“从低到高排序;
-O 单独一行中打印每个可用的字段名称;
-p [N1, N2…] 仅显示指定进程ID的信息;
-s 启动时强制使用安全模式,即使是 root 用户也不例外,这种模式最好通过系统配置文件来控制;
-S 累计显示进程的 CPU 使用时间;
-u (-U [ID or name]) 仅显示指定用户名/ID的进程信息;
-w [number] 1、在批处理模式下,如果不带参数,top 将使用 COLUMNS= 和 LINES=环境变量(如果已设置)来格式化输出。 否则,宽度将固定为最大 512 列。 使用参数时,输出宽度可以减少或增加(最多 512 列),但行数被视为无限制。2、在正常显示模式下,如果不带参数,top 将尝试使用 COLUMNS= 和 LINES=环境变量(如果已设置)来格式化输出。 使用参数时,输出宽度只能减少,不能增加。无论是使用环境变量还是使用 -w参数,在非批处理模式下,都不能超过实际终端尺寸。注意:如果不使用此命令行选项,无论是否在批处理模式下,输出宽度始终以调用 top 的终端为准。

3. top 命令示例

以下介绍常见 top 命令示例,参数选项区分大小写;

注:使用 top 命令参数,可在 top 运行时按相应的键,或直接在 top 命令语法中输入参数。

3.1 列出所有进程

列出系统中所有正在运行的 Linux 进程:

root@dev:~# top
-----------------------------------------------------------------------------------
top - 00:02:34 up 7 days, 9:08, 3 users, load average: 3.37, 4.00, 4.57
Tasks: 1534 total, 4 running, 1530 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.8 us, 1.3 sy, 0.0 ni, 95.8 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 257367.9 total, 150051.6 free, 65593.6 used, 41722.8 buff/cache
MiB Swap: 8192.0 total, 8192.0 free, 0.0 used. 217484.5 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
229851 root 20 0 1201012 288952 69972 S 80.4 0.1 4868:56 kubelet
17306 bolean 20 0 141452 45712 6368 S 26.8 0.0 2757:58 haproxy
8632 root 20 0 13.2g 469392 124456 S 18.0 0.2 89:16.39 deepflow-agent
230181 root 20 0 1837744 978.0m 82448 S 13.1 0.4 1264:11 kube-apiserver
3269420 bolean 20 0 26448 17556 8048 R 11.8 0.0 314:41.80 systemd
1 root 20 0 178700 22792 8532 R 9.2 0.0 1411:56 systemd
4118 root 20 0 11.1g 242716 102292 S 8.2 0.1 906:05.41 etcd
228046 root 20 0 1144784 207100 75436 S 5.2 0.1 1246:58 containerd
293006 64045 20 0 4491584 3.5g 40216 S 3.6 1.4 368:38.80 ceph-osd
42868 root 20 0 5986956 43200 6572 S 3.3 0.0 322:38.94 ovs-vswitchd

如果显示的进程列表较长,可使用上下箭头和翻页键进行滚动,要退出 top,请按 q

top 显示内容介绍:

  • 第 1 行:系统信息

top - 00:02:34 up 7 days,  9:08,  3 users,  load average: 3.37, 4.00, 4.57

00:02:34:系统当前时间;up 7 days, 9:08:系统开机运行时间;3 users:当前 3 用户在线;load average: 3.37, 4.00, 4.57:系统1分钟、5分钟、15分钟的CPU负载信息;

  • 第 2 行: Tasks 信息

Tasks: 1534 total,   4 running, 1530 sleeping,   0 stopped,   0 zombie

显示 Tasks 任务信息:1534 total:当前有 1534 个任务,也就是 1534 个进程;4 running:4 个进程正在运行;1530 sleeping:1530 个进程睡眠;0 stopped:停止的进程数;0 zombie:僵死的进程数;

  • 第 3 行:CPU 信息

%Cpu(s):  3.4 us,  1.3 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st

%Cpu(s),显示 CPU 整体情况;

3.4 us:用户态进程占用 CPU 时间百分比,不包含 renice 值为负的任务占用的 CPU 的时间;1.3 sy:内核占用 CPU 时间百分比;0.0 ni:改变过优先级的进程占用 CPU 的百分比;95.2 id:空闲 CPU 时间百分比;0.0 wa:等待 I/O 的 CPU 时间百分比;0.0 hi:CPU 硬中断时间百分比;0.1 si:CPU 软中断时间百分比;

注:这里显示数据是所有 cpu 的平均值,如果想看每一个cpu的处理情况,按 1 即可;隐藏,再次按 1;

root@dev:~# top
-------------------------------------------------------------------------
top - 00:16:42 up 7 days, 9:22, 3 users, load average: 4.30, 4.30, 4.31
Tasks: 1494 total, 1 running, 1493 sleeping, 0 stopped, 0 zombie
%Cpu0 : 4.1 us, 1.0 sy, 0.0 ni, 94.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 7.9 us, 3.0 sy, 0.0 ni, 88.5 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
%Cpu2 : 3.0 us, 1.3 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 5.3 us, 3.9 sy, 0.0 ni, 90.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu4 : 4.4 us, 0.7 sy, 0.0 ni, 95.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 8.7 us, 3.3 sy, 0.0 ni, 87.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
... ...
  • 第 4 行:内存信息

MiB Mem : 257367.9 total, 150051.6 free,  65593.6 used,  41722.8 buff/cache

257367.9 total:物理内存总量;150051.6 free:使用的物理内存量;65593.6 used:空闲的物理内存量;41722.8 buff/cache:用作内核缓存的物理内存量;

  • 第 4 行:Swap 信息

MiB Swap:   8192.0 total,   8192.0 free,      0.0 used. 217484.5 avail Mem

8192.0 total:交换区总量;8192.0 free:空闲的交换区量;0.0 used:使用的交换区量;217484.5 avail Mem:代表可用于进程下一次分配的物理内存数量;

  • 第 5+ 行: 进程信息

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

PID:进程的ID;USER:进程所有者;PR:进程的优先级别,越小越优先被执行;NInice(NI):值;VIRT:进程占用的虚拟内存;RES:进程占用的物理内存;SHR:进程使用的共享内存;S:进程的状态: S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表示该进程优先值为负数;%CPU:进程占用 CPU 的使用率;%MEM:进程使用的物理内存和总内存的百分比;TIME+:该进程启动后占用的总的 CPU 时间,即占用 CPU 使用时间的累加值;COMMAND:进程启动命令名称;

3.2 发送信号

使用 top 命令可向运行中的进程发送任何信号。按 k 键并输入进程的 PIDtop 会给你机会键入要发送的信号,如果不输入特定信号,进程将被杀死。

root@dev:~# top
-------------------------------------------------------------------------
top - 16:36:15 up 40 days, 7:09, 2 users, load average: 0.17, 0.25, 0.26
Tasks: 244 total, 1 running, 243 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 32121.9 total, 19519.4 free, 1412.0 used, 11190.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30389.5 avail Mem
PID to signal/kill [default pid = 3847]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3847 root 20 0 1264900 430028 86048 S 8.6 1.3 4364:00 kube-apiserver
... ...

如上:PID to signal/kill [default pid = 3847] 等待输入 PID;

3.3 重复 X 次后退出

top 命令会不断刷新统计数据,直到按 q 键退出程序为止。

语法:

top -n [X]

对于 [X],指定希望 top 刷新输出的次数。

3.4 进程排序

默认情况下,top 使用 %CPU 列对进程列表进行排序,要使用不同的列对进程进行排序,请按以下按键:

  • M: 按 %MEM 列排序;

  • N: 按 PID 列排序;

  • T: 按 TIME+ 列排序;

  • P: 按 %CPU 列排序;

示例:进程列表按 %MEM 列排序:

root@dev:~# top
-------------------------------------------------------------------------
top - 16:59:37 up 40 days, 7:32, 2 users, load average: 0.33, 0.44, 0.51
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 1.5 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 32121.9 total, 19498.8 free, 1418.7 used, 11204.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30382.9 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3847 root 20 0 1264900 429732 86048 S 7.3 1.3 4365:46 kube-apiserver
4052 root 20 0 2760620 133964 73380 S 5.3 0.4 2720:36 kubelet
3866 root 20 0 837212 123484 68312 S 2.7 0.4 1438:01 kube-controller
204 root 19 -1 142376 101740 100512 S 0.0 0.3 7:31.28 systemd-journal
15239 root 20 0 1298988 80032 43744 S 1.0 0.2 511:05.30 kube-ovn-contro
10196 root 20 0 2891924 78884 40984 S 3.0 0.2 1092:27 containerd

进程按 %MEM 降序输出;

注意:按 W 键可使设置和自定义功能持久有效,下次启动 top 时,更改将生效。配置文件保存在主目录下的 .toprc 文件中。

3.5 按特定用户过滤进程

使用 -u 选项可以显示指定用户进程。

top -u [user name]

在交互模式下按 u 键会提示输入用户名或用户 ID。

示例:

root@dev:~# top
-------------------------------------------------------------------------
top - 17:03:50 up 40 days, 7:36, 2 users, load average: 1.47, 0.66, 0.55
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.9 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 32121.9 total, 19489.3 free, 1425.5 used, 11207.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30376.1 avail Mem
Which user (blank for all)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3847 root 20 0 1264900 432364 86048 S 6.6 1.3 4366:05 kube-apiserver
4052 root 20 0 2760620 133904 73380 S 3.3 0.4 2720:48 kubelet
3866 root 20 0 837212 123484 68312 S 2.7 0.4 1438:07 kube-controller

Which user (blank for all) 等待用户名或PID,输出结果只显示指定用户的进程。

3.6 指定显示单位

使用 E 参数用于指定顶部内存显示单位。按小写 e 参数用于显示进程列表中数值的单位。

可用的选项有:

  • kibibytes (KiB)

  • mebibytes (MiB)

  • gibibytes (GiB)

  • tebibytes (TiB)

  • pebibytes (PiB)

  • exbibytes (EiB – applies only for memory values)

交互方式下,反复按 E 或者 e 切换单位显示;

或者:

root@dev:~# top E g
-------------------------------------------------------------------------
top - 17:14:18 up 40 days, 7:47, 2 users, load average: 0.58, 0.44, 0.47
Tasks: 246 total, 1 running, 245 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.7 us, 0.9 sy, 0.0 ni, 97.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
GiB Mem : 31.4 total, 19.0 free, 1.4 used, 11.0 buff/cache
GiB Swap: 0.0 total, 0.0 free, 0.0 used. 29.7 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3847 root 20 0 1264900 430452 86048 S 15.2 1.3 4366:52 kube-apiserver
4052 root 20 0 2760620 135364 73380 S 5.0 0.4 2721:17 kubelet
3849 root 20 0 10.7g 81088 25472 S 4.0 0.2 2195:30 etcd

3.7 更改输出内容

默认的顶部输出包含大量信息,可能会显得混乱。只需按几下键就能调整内容,找到所需的信息,或从摘要中删除某些部分。

单个 CPU 内核统计

按键盘上的 1 可以查看每个 CPU 内核的单独统计数据,反复按 1 可切换内核统计数据。

root@dev:~# top
-------------------------------------------------------------------------
top - 17:17:22 up 40 days, 7:50, 2 users, load average: 0.46, 0.39, 0.44
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu0 : 2.6 us, 2.3 sy, 0.0 ni, 95.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 1.3 us, 2.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

CPU 使用率图表

如果想用图形显示 CPU 的使用情况,top 支持基本的 ASCII 图形,表示每个 CPU 内核的使用情况,按 t键可以打开或关闭图形。

root@dev:~# top
-------------------------------------------------------------------------
top - 17:20:32 up 40 days, 7:53, 2 users, load average: 0.45, 0.36, 0.41
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu0 : 1.0/1.3 2[||]
%Cpu1 : 0.3/1.3 2[|]
%Cpu2 : 0.0/0.3 0[]
%Cpu3 : 1.0/1.3 2[||]
%Cpu4 : 0.7/1.7 2[|||]
%Cpu5 : 0.3/1.0 1[|]
%Cpu6 : 0.7/1.0 2[||]
%Cpu7 : 1.0/1.7 3[|||]

要将图形显示更改为实心方块字符,请再次按 t

内存使用图表

该命令还支持内存和 Swap 的图形显示,要直观显示内存使用情况,请按 m,再次按 m 退出。

root@dev:~# top
-------------------------------------------------------------------------
top - 17:24:00 up 40 days, 7:56, 2 users, load average: 1.00, 0.54, 0.47
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 0.9 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 5.4/32121.9 [|||||]
MiB Swap: 0.0/0.0 []

3.8 更改文字颜色

按 z 键为输出添加颜色,默认情况下,颜色会变为红色。要进一步自定义显示内容并选择不同的颜色,请按照以下步骤操作:

1.按 Z 打开色彩设置页面:

Help for color mapping - "Current Window" =  1:Def 

color - 04:25:44 up 8 days, 50 min, 7 users, load average:
Tasks: 64 total, 2 running, 62 sleeping, 0 stopped,
%Cpu(s): 76.5 user, 11.2 system, 0.0 nice, 12.3 idle
Nasty Message! -or- Input Prompt
PID TTY PR NI %CPU TIME+ VIRT SWAP S COMMAND
17284 pts/2 8 0 0.0 0:00.75 1380 0 S /bin/bash
8601 pts/1 7 -10 0.4 0:00.03 916 0 R color -b -z
11005 ? 9 0 0.0 0:02.50 2852 1008 S amor -sessi
available toggles: B =disable bold globally (Off),
z =color/mono (On), b =tasks "bold"/reverse (On)

1) Select a target as an upper case letter, current target is T :
S = Summary Data, M = Messages/Prompts,
H = Column Heads, T = Task Information
2) Select a color as a number or use the up/down arrow keys
to raise/lower the 256 colors value, current color is 1 :
0 = black, 1 = red, 2 = green, 3 = yellow,
4 = blue, 5 = magenta, 6 = cyan, 7 = white

3) Then use these keys when finished:
'q' or <Esc> to abort changes to window '1:Def'
'a' or 'w' to commit & change another, <Enter> to commit and end

2.按以下选项,选择要更改的显示元素:

S: 数据汇总区;M: 信息和提示;H: 列标题;T: 流程列表中的任务信息;

按 Enter 键确认选择。

3.用以下按键为所选内容选择颜色:

0: Black;1: Red;2: Green;3: Yellow;4: Blue;5: Magenta;6: Cyan;7: White;

用 Enter 键确认选择。

3.9 显示进程命令

要查看完整的命令行而不是进程名称,请按 c 键,要切换回显示进程名称,请再按一次 c 键。

top - 17:34:03 up 40 days,  8:07,  2 users,  load average: 0.19, 0.27, 0.36
Tasks: 247 total, 1 running, 244 sleeping, 2 stopped, 0 zombie
%Cpu(s): 1.3 us, 1.0 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 32121.9 total, 19470.3 free, 1426.4 used, 11225.1 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30375.1 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
49959 root 20 0 756096 48464 34780 S 0.3 0.1 137:08.78 /coredns -conf /etc/coredns/Corefile
664402 root 20 0 11500 4312 3372 R 0.3 0.0 0:00.16 top
2635576 bolean 20 0 19456 10040 8132 S 0.3 0.0 9:01.22 /lib/systemd/systemd --user
2982669 root 20 0 0 0 0 I 0.3 0.0 0:02.33 [kworker/10:4-events]
2 root 20 0 0 0 0 S 0.0 0.0 0:00.33 [kthreadd]

3.10 进程层次结构

要查看哪些进程是由其他进程启动或产生的,请按 V 键。

top - 17:36:22 up 40 days,  8:09,  2 users,  load average: 0.08, 0.19, 0.31
Tasks: 247 total, 1 running, 244 sleeping, 2 stopped, 0 zombie
%Cpu(s): 1.4 us, 1.4 sy, 0.0 ni, 97.2 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 32121.9 total, 19467.3 free, 1428.1 used, 11226.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30373.4 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
638 root 20 0 12184 7336 6404 S 0.0 0.0 0:00.06 `- sshd
2776314 root 20 0 13968 9212 7752 S 0.0 0.0 0:00.03 `- sshd
2776632 bolean 20 0 13968 5968 4488 S 0.0 0.0 0:00.29 `- sshd
2776645 bolean 20 0 10032 5144 3452 S 0.0 0.0 0:00.03 `- bash
2776924 root 20 0 11208 4816 4100 S 0.0 0.0 0:00.01 `- sudo
2776989 root 20 0 10136 4192 3716 S 0.0 0.0 0:00.00 `- su

如果想查看系统中子进程-父进程的层次结构,树形视图非常有用。

3.11 显示活动任务

要过滤输出并只显示活动任务,请按 I 键,输出结果会隐藏自上次更新以来未使用任何 CPU 资源的任务。

3.12 显示指定数量进程

按 n 键限制输出中的进程数,无论活动进程的数量是多少,top 都会提示输入要查看的进程数量。

例如,只显示前 5 个进程,交互模式输入 n, 输入显示进程数即可:

Maximum tasks = 0, change to (0 is unlimited)  等待进程数
top - 17:41:02 up 40 days,  8:14,  2 users,  load average: 0.55, 0.33, 0.33
Tasks: 247 total, 1 running, 244 sleeping, 2 stopped, 0 zombie
%Cpu(s): 1.4 us, 1.1 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 32121.9 total, 19465.2 free, 1427.4 used, 11229.3 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 30374.2 avail Mem
Maximum tasks = 0, change to (0 is unlimited)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3847 root 20 0 1264900 428796 86048 S 7.3 1.3 4368:52 kube-apiserver
4052 root 20 0 2760620 134060 73380 S 5.6 0.4 2722:31 kubelet

3.13 更改进程优先级

允许更改进程优先级,按照以下步骤操作:

  • 1. 运行 top 并按 r 键;

  • 2. 出现提示时,输入进程 ID 并按 Enter 键;

  • 3. 输入 PID 后,程序会提示输入新的优先级。输入新值并按 Enter 键;

注:负值表示进程优先级较高。

3.14 过滤进程

top 命令过滤功能允许使用过滤表达式来限制在列表中看到的进程,按 o 键激活过滤选项。程序会提示输入过滤表达式。

例如,输入以下过滤器:%MEM>5.0,只显示占用内存超过 5% 的进程。按 = 清除过滤。

感谢您花时间阅读文章!

收藏本站不迷路!


原文始发于微信公众号(滑翔的纸飞机):详解 Linux top 命令

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260841.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!