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
键并输入进程的 PID
,top
会给你机会键入要发送的信号,如果不输入特定信号,进程将被杀死。
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