Linux系统top命令使用

Linux系统top命令使用

𝓓𝓸𝓷 Lv6

一、概念

top 是一个实时监控工具,用于显示系统中进程的资源使用情况,包括CPU、内存、交换分区等信息。它能够动态更新数据,帮助用户监控系统的负载和性能。


二、功能概述

  • 显示系统的运行时间、用户数和负载平均值。
  • 列出所有正在运行的进程及其资源使用情况。
  • 支持按多种方式排序(CPU、内存等)。
  • 提供交互式命令,允许用户动态调整显示内容或终止进程。
1
2
3
4
5
6
7
8
9
10
11
12
13
top - 20:29:19 up 83 days,  3:42,  2 users,  load average: 7.96, 7.74, 6.15
Tasks: 214 total, 2 running, 212 sleeping, 0 stopped, 0 zombie
%Cpu(s): 50.3 us, 12.4 sy, 0.0 ni, 32.8 id, 0.0 wa, 0.0 hi, 4.5 si, 0.0 st
KiB Mem : 16267784 total, 5136976 free, 9050312 used, 2080496 buff/cache
KiB Swap: 6160380 total, 6005320 free, 155060 used. 5676356 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28509 root 20 0 9.912g 1.812g 7964 S 524.3 11.7 4998:59 java
16168 root 20 0 15.625g 5.199g 18020 S 4.0 33.5 233:32.50 java
28 root 20 0 0 0 0 S 0.3 0.0 3:02.31 ksoftirqd/4
33 root 20 0 0 0 0 S 0.3 0.0 2:26.09 ksoftirqd/5
43 root 20 0 0 0 0 S 0.3 0.0 4:56.15 ksoftirqd/7
552 root 20 0 0 0 0 R 0.3 0.0 36:56.82 xfsaild/dm-0
  • top命令默认3s刷新一次
  • cpu数据显示的是所有cpu使用率的平均值,按1可以查看每个cpu的使用情况

三、主要参数

以下是一些常用的 top 参数:

  • 基本参数
参数 说明
-b 批处理模式,将输出重定向到文件。
-d 设置刷新间隔,默认为5秒。
-p 监控指定的进程ID(PID)。支持多个PID,用逗号分隔。
-c 显示完整的命令行参数,而不是仅显示命令名。
-n 限制输出次数,默认无限次。
-H 显示线程信息。
  • 其他参数
参数 说明
-s 安全模式,隐藏敏感信息(如僵尸进程)。
-i 忽略空闲或已终止的进程。
-q 高优先级运行,减少延迟。

四、使用示例

  • 查看实时资源使用情况:

    1
    top
  • 每隔2秒刷新一次,并显示完整的命令行:

    1
    top -d 2 -c
  • 监控特定进程(如PID为12345):

    1
    top -p 12345
  • 将输出保存到文件,运行5次:

    如果使用shell脚本,必须使用-b参数,否则会报TERM environment variable not set.错误

    1
    top -b -n 5 -c > system_usage.log
  • 监控多个PID(如1234和5678):

    1
    top -p 1234,5678

五、交互式命令

top 运行时,按下特定键可以执行以下操作:

功能
h 显示帮助信息。
? 同上。
k 终止进程(输入PID和信号)。
r 重新运行已终止的进程。
q 退出 top
fF 修改显示字段。
oO 改变排序方式(如CPU、内存)。
c 查看完成的Command进程名称

六、命令详解

1.输出项详解
(1) 第一行
1
top - 20:29:19 up 83 days,  3:42,  2 users,  load average: 7.96, 7.74, 6.15
  • 21:45:45 — 当前系统时间
  • 1:31 — 系统已经连续运行了1小时31分
  • 2 users — 当前有2个用户登录系统
  • load average: 7.96, 7.74, 6.15 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。对于单核cpu,超过1表示满负载,而对于多核cpu,满负荷状态的数字为 “1.00 * CPU核数”,即双核CPU对应2.00。
(2)第二行
1
Tasks: 214 total,   2 running, 212 sleeping,   0 stopped,   0 zombie
  • Tasks — 任务(进程),系统现在共有214个进程,其中处于运行中的有2个,212个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
(3) 第三行
1
%Cpu(s): 50.3 us, 12.4 sy,  0.0 ni, 32.8 id,  0.0 wa,  0.0 hi,  4.5 si,  0.0 st

第三行主要描述系统cpu的占用情况:

  • 50.3 us — 用户空间占用CPU的百分比。
  • 12.4 sy — 内核空间占用CPU的百分比。
  • 0.0 ni — 改变过优先级的进程占用CPU的百分比
  • 32.8 id — 空闲CPU百分比
  • 0.0% wa — IO等待占用CPU的百分比
  • 0.0 hi — 硬中断(Hardware IRQ)占用CPU的百分比
  • 4.5 si — 软中断(Software Interrupts)占用CPU的百分比
  • 0.0 st —(Steal Time)当 hypervisor 服务另一个虚拟处理器的时候,虚拟 CPU 等待实际 CPU 的时间的百分比
(4) 第四行
1
KiB Mem : 16267784 total,  5136976 free,  9050312 used,  2080496 buff/cache

第四行描述的是系统的内存使用情况(以kb为单位):

  • 16267784 total — 物理内存总量
  • 5136976 used — 使用中的内存总量
  • 9050312 free — 空闲内存总量
  • 2080496 buff/cache — 缓存的内存量
(5) 第五行
1
KiB Swap:  6160380 total,  6005320 free,   155060 used.  5676356 avail Mem 

第五行描述的是交换分区情况:

  • 6160380 total — 交换区总量

  • 155060 used — 使用的交换区总量

  • 6005320 free — 空闲交换区总量

  • 5676356 avail Mem — 可用的交换区总量

在默认情况下,仅显示比较重要的 PIO、USERPR、NI、VIRT、RES、SHR、S、%CPU、%MEMTIME+、COMMAND列。 要想展示隐藏项,按 f 键进入选择界面,左侧有 * 号的表示该项是展示状态,通过方向键上下移动到某项,按 d 键可以改变该项的展示状态,然后按【ESC】或【q】键退出返回top界面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
* PID     = Process Id          
* USER = Effective User Name
* PR = Priority
* NI = Nice Value
* VIRT = Virtual Image (KiB)
* RES = Resident Size (KiB)
* SHR = Shared Memory (KiB)
* S = Process Status
* %CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
TTY = Controlling Tty
TPGID = Tty Process Grp Id
SID = Session Id
nTH = Number of Threads
P = Last Used Cpu (SMP)
TIME = CPU Time
SWAP = Swapped Size (KiB)
CODE = Code Size (KiB)
DATA = Data+Stack (KiB)
nMaj = Major Page Faults
nMin = Minor Page Faults
nDRT = Dirty Pages Count
WCHAN = Sleeping in Function
Flags = Task Flags <sched.h>
CGROUPS = Control Groups
SUPGIDS = Supp Groups IDs
SUPGRPS = Supp Groups Names
TGID = Thread Group Id
ENVIRON = Environment vars
vMj = Major Faults delta
vMn = Minor Faults delta
USED = Res+Swap Size (KiB)
nsIPC = IPC namespace Inode
nsMNT = MNT namespace Inode
nsNET = NET namespace Inode
nsPID = PID namespace Inode
nsUSER = USER namespace Inode
nsUTS = UTS namespace Inode
序号 列名 含义
a PID 进程ID
b PPID 父进程ID
c RUSER 真实用户名
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态:D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
2.命令参数

top命令可以后缀不同的参数,从而实现特定目的:

  1. -b 批次模式运行,通常用来将top的输出结果传送给其他程式或储存成文件。
  2. -d 指定每两次屏幕信息刷新之间的时间间隔。可以使用s交互命令来改变之。
  3. -p 监控指定进程。监控多个进程时,进程ID之间以逗号分隔,只能在命令行下使用。
  4. -q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  5. -S 指定累计模式
  6. -s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  7. -i 使top不显示任何闲置或者僵死进程。
  8. -c 显示整个命令行而不只是显示命令名
  9. -n top命令运行n次,一般与-b搭配使用
  10. -H 显示线程,当这个设定开启时, 将显示所有进程产生的线程。
  11. -I 显示空闲的进程。

参数使用示例:

  • top -b -d 2 -n 5 -c > result.txt:每2s监控一次,监控5次,并将结果保存到文件中。
  • top -d 2:每隔2秒显式所有进程的资源占用情况
  • top –c:每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
  • top -p 12345 -p 6789:每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
  • top -d 2 -c -p 123456 :每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
  • top -p -H:显示一个进程中各个线程CPU的占用率
3.交互命令

在top界面,可以通过一些指令实时改变显示内容(区分大小写):

  • Ctrl+L 擦除并且重写屏幕。
  • h或者? 显示帮助画面,给出一些简短的命令总结说明。
  • k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  • i 忽略闲置和僵死进程。这是一个开关式命令。
  • q 退出程序。
  • r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  • S 切换到累计模式。
  • s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。
  • f或者F 从当前显示中添加或者删除项目。
  • o或者O 改变显示项目的顺序。
  • l 切换显示平均负载和启动时间信息。
  • m 切换显示内存信息。
  • t 切换显示进程和CPU状态信息。
  • c 切换显示命令名称和完整命令行。
  • M 根据驻留内存大小进行排序。
  • P 根据CPU使用百分比大小进行排序。
  • T 根据时间/累计时间进行排序。
  • W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
  • <:按当前排序栏位左边相邻栏位排序。
  • >:按当前排序栏位右边相邻栏位排序。
  • R:反向排序

七、常见问题

  1. 如何清空屏幕?
    • 按下 Ctrl + l
  2. 如何退出 top
    • 输入 q 或按下 Esc 键。
  3. 如何终止进程?
    • 在提示符后输入PID和信号(如 1234 SIGKILL)。

八、总结

top 是一个强大的实时监控工具,适用于系统管理员和开发人员。通过合理的参数组合和交互式命令,用户可以高效地监控和管理系统的资源使用情况。

  • Title: Linux系统top命令使用
  • Author: 𝓓𝓸𝓷
  • Created at : 2025-03-13 16:20:30
  • Updated at : 2025-04-01 18:02:37
  • Link: https://www.zhangdong.me/linux-top.html
  • License: This work is licensed under CC BY-NC-SA 4.0.
评论