Linux命令 - top命令
Linux中 top 命令是常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
1.语法:
top [参数]
2.功能:
显示目前正在系统中执行的程序,并通过它所提供的互动式界面,用热键加以管理,包括进程ID、内存占用率、CPU占用率等。
3.参数:
-b 使用批处理模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内。
-c 列出程序时,显示每个程序的完整指令,包括指令名称,路径和参数等相关信息。
-d<间隔秒数> 设置top监控程序执行状况的间隔时间,单位以秒计算。
-i 执行top指令时,忽略闲置或是已成为Zombie的程序。
-n<执行次数> 设置监控信息的更新次数。
-q 持续监控程序执行的状况。
-s 使用保密模式,消除互动模式下的潜在危机。
-S 使用累计模式,其效果类似ps指令的"-S"参数。
4.交互命令:
在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
多U多核CPU监控
&emnp;在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况,再按数字键1,就会返回到top基本视图界面。
高亮显示当前运行进程
&emnp;敲击键盘“b”(打开/关闭加亮效果)。
进程字段排序
&emnp;默认进入top时,各进程是按照CPU的占用量来排序的。敲击键盘“x”(打开/关闭排序列的加亮效果)。
改变排序列
&emnp;通过”shift + >”或”shift + <”可以向右或左改变排序列。如下图是按照PID来排序。
5.常用范例:
例一:显示进程信息
命令:top
[root@localhost ~]# top
top - 14:22:55 up 1 day, 2:57, 1 user, load average: 0.11, 0.03, 0.01
Tasks: 255 total, 1 running, 254 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.7 us, 2.7 sy, 0.0 ni, 88.6 id, 0.0 wa, 1.0 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 78.9 free, 1263.2 used, 447.9 buff/cache
MiB Swap: 2048.0 total, 1912.2 free, 135.8 used. 357.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2211 root 20 0 3007976 258844 83436 S 9.3 14.1 0:36.72 gnome-shell
2892 root 20 0 618208 60908 46060 S 1.3 3.3 0:04.52 gnome-terminal-
11 root 20 0 0 0 0 I 0.3 0.0 0:00.20 rcu_sched
1 root 20 0 245616 10192 7728 S 0.0 0.6 0:02.59 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
17 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
19 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khungtaskd
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
21 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
23 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
24 root 39 19 0 0 0 S 0.0 0.0 0:00.56 khugepaged
25 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
27 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
28 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio
29 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 tpm_dev_wq
前五行是当前系统情况整体的统计信息区,每一行信息的具体意义如下:
第一行,任务队列信息,同 uptime 命令的执行结果
top - 14:22:55 up 1 day, 2:57, 1 user, load average: 0.11, 0.03, 0.01
内容 | 说明 |
---|---|
14:22:55 | 当前系统时间 |
up 1 day, 2:57 | 系统的运行时间,本机已经运行1天2小时57分钟(在这期间系统没有重启过) |
1 user | 当前登录了一个用户 |
load average: 0.11, 0.03, 0.01 | 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。 |
第二行,任务进程信息
Tasks: 255 total, 1 running, 254 sleeping, 0 stopped, 0 zombie
系统现在共有255个进程,其中处于运行中的有1个,254个在休眠(sleep),正在停止的有0个,zombie状态(僵尸)的有0个。
内容 | 说明 |
---|---|
255 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
254 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
第三行,cpu状态信息
%Cpu(s): 7.7 us, 2.7 sy, 0.0 ni, 88.6 id, 0.0 wa, 1.0 hi, 0.0 si, 0.0 st
在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识。
内容 | 说明 |
---|---|
7.7 us | 用户模式占用的CPU百分比 |
2.7 sy | 系统模式占用的CPU百分比 |
0.0 ni | 改变过优先级的用户进程占用的CPU百分比 |
88.6 id | 空闲CPU的CPU百分比 |
0.0 wa | 等待输入/输出(I/O)的进程的占用CPU百分比 |
1.0 hi | 硬中断请求服务占用的CPU百分比 |
0.0 si | 软中断请求服务占用的CPU百分比 |
0.0 st | 虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比 |
第四行,内存状态
MiB Mem : 1790.0 total, 78.9 free, 1263.2 used, 447.9 buff/cache
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的avail Mem ,按这个公式此台服务器的可用内存:78.9k +447.9k +357.8k = 884.6k左右。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
内容 | 说明 |
---|---|
1790.0 total | 物理内存的总量,单位KB |
78.9 free | 空闲的物理内存数量 |
1263.2 used | 已经使用的物理内存数量 |
447.9 buff/cache | 作为缓冲的内存数量 |
第五行,交换分区信息
MiB Swap: 2048.0 total, 1912.2 free, 135.8 used. 357.8 avail Mem
内容 | 说明 |
---|---|
2048.0 total | 交换分区(虚拟内存)的总大小 |
1912.2 free | 空闲交换分区的大小 |
135.8 used | 已经使用的交互分区的大小 |
357.8 avail Mem | 作为缓存的交互分区的大小 |
第六行,空行
第七行以下:各进程(任务)的状态监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2211 root 20 0 3007976 258844 83436 S 9.3 14.1 0:36.72 gnome-shell
内容 | 说明 |
---|---|
PID 进程id | |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
例二:显示完整命令
命令:top -c
[root@localhost ~]# top -c
top - 15:34:28 up 4:09, 1 user, load average: 0.00, 0.02, 0.00
Tasks: 255 total, 1 running, 254 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.0 us, 2.7 sy, 0.0 ni, 94.6 id, 0.0 wa, 0.7 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 89.4 free, 1265.8 used, 434.8 buff/cache
MiB Swap: 2048.0 total, 1901.5 free, 146.5 used. 354.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2211 root 20 0 3017560 265244 81412 S 4.7 14.5 0:49.24 /usr/bin/gnome-shell
5872 root 20 0 605964 54156 39720 S 1.0 3.0 0:00.32 /usr/libexec/gnome-terminal-server
4539 root 20 0 0 0 0 I 0.3 0.0 0:00.10 [kworker/u256:0-events_unbound]
4708 root 20 0 205416 31688 9860 S 0.3 1.7 0:05.40 /usr/libexec/sssd/sssd_kcm --uid 0 --gid 0 +
5905 root 20 0 65752 5072 4188 R 0.3 0.3 0:00.02 top -c
1 root 20 0 245616 10192 7728 S 0.0 0.6 0:02.67 /usr/lib/systemd/systemd --switched-root --+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd]
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [rcu_gp]
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [rcu_par_gp]
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [kworker/0:0H-kblockd]
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 [mm_percpu_wq]
10 root 20 0 0 0 0 S 0.0 0.0 0:00.27 [ksoftirqd/0]
11 root 20 0 0 0 0 I 0.0 0.0 0:00.25 [rcu_sched]
例三:以批处理模式显示程序信息
命令:top -b
例四:以累积模式显示程序信息
命令:top -S
例五:设置信息更新次数
命令:top -n 2
表示更新两次后终止更新显示。
例六:设置信息更新次数
命令:top -d 3
表示更新周期为3秒。
例七:显示指定的进程信息
命令:top -p 2211
显示进程号为2211的进程信息,CPU、内存占用率等。
[root@localhost ~]# top -p 2211
top - 15:40:36 up 4:15, 1 user, load average: 0.08, 0.02, 0.01
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.1 us, 3.1 sy, 0.0 ni, 90.8 id, 0.0 wa, 0.7 hi, 0.3 si, 0.0 st
MiB Mem : 1790.0 total, 88.3 free, 1266.6 used, 435.1 buff/cache
MiB Swap: 2048.0 total, 1901.5 free, 146.5 used. 354.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2211 root 20 0 3017084 264476 81000 S 8.0 14.4 0:53.92 gnome-shell