跳到主要内容

Linux top 命令 - 实时显示进程和系统状态

介绍

top 命令用于动态实时显示 Linux 进程的状态。

语法

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

选项

  • -b :以批处理模式操作
  • -c :显示完整的治命令
  • -d :屏幕刷新间隔时间
  • -I :忽略失效过程
  • -s :保密模式
  • -S :累积模式
  • -i <secs> :设置间隔时间
  • -u <user> :指定用户名
  • -p <pid> :指定进程
  • -n <max> :循环显示的次数

输出说明

执行 top 命令后,会在终端输出系统进程状态信息,头部信息大致如下:

top - 18:34:11 up  9:14,  2 users,  load average: 0.93, 0.87, 0.72
Tasks: 322 total, 1 running, 264 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.4 us, 1.1 sy, 0.0 ni, 95.3 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8029784 total, 130760 free, 4012508 used, 3886516 buff/cache
KiB Swap: 7931900 total, 7923452 free, 8448 used. 3191432 avail Mem

对于服务器来说,重点关注:

  • load average :平均负载,后面3个值分别为当前1分钟、5分钟、15分钟的平均负载,最大值等于 CPU 核心数。
  • KiB Mem :该行数据显示内存总大小、空闲内存、已使用内存,以及用于缓存的内存大小。
  • KiB Swap :该行数据显示交换分区的情况。

接着输出一个进程列表,表头栏目如下:

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

每列的含义如下:

  • PID :进程 ID
  • USER :进程所有者
  • PR :进程优先级
  • NI :nice 值(负值表示高优先级,正值表示低优先级)
  • VIRT :进程使用的虚拟内存总量(同 VSZ),单位 kb。VIRT = SWAP + RES
  • RES :进程使用的、未被换出的物理内存大小(同 RSS),单位 kb。RES = CODE + DATA
  • SHR :共享内存大小,单位 kb
  • S :进程状态。D = 不可终端的睡眠状态,R = 运行,S = 睡眠,T = 跟踪/停止,Z = 僵尸进程
  • %CPU :上次更新到现在的 CPU 时间占用百分比
  • %MEM :进程使用的物理内存百分比
  • TIME+ :进程使用的 CPU 时间总计,单位 1/100 秒
  • COMMAND :进程名称(命令名/命令行)

交互子命令

另外,top 还支持交互子命令,在 top 运行窗口按下面按键,会调整显示效果。

  • M :根据驻留内存大小进行排序
  • P :根据CPU使用百分比大小进行排序
  • T :根据时间/累计时间进行排序
  • H :将线程查看模式切换为开或关
  • 1 :显示每个逻辑 CPU 的状况
  • h :显示帮助画面,给出一些简短的命令总结说明
  • k :终止一个进程
  • i :忽略闲置和僵死进程,这是一个开关式命令
  • r :重新安排一个进程的优先级别
  • S :切换到累计模式
  • s :改变两次刷新之间的延迟时间(单位为 s),如果有小数,就换算成 ms(输入 0 值则系统将不断刷新,默认值是 5s)
  • f 或者 F :从当前显示中添加或者删除项目
  • o 或者 O :改变显示项目的顺序
  • l :切换显示平均负载和启动时间信息
  • m :切换显示内存信息
  • t :切换显示进程和 CPU 状态信息
  • c :切换显示命令名称和完整命令行
  • w :将当前设置写入 ~/.toprc 文件中

最后,按 qCTRL+C 可退出程序。

示例

显示进程信息:

top

显示完整命令:

top -c

以批处理模式显示程序信息:

top -b

以累积模式显示程序信息:

top -S

设置信息更新次数(更新十次后退出):

top -n 10

设置信息更新时间(更新周期为3秒):

top -d 3

显示指定的进程信息(显示进程号为 pid 的进程信息,CPU、内存占用率等):

top -p <pid>

实时显示 Linux 系统各个线程运行情况(你也可以在 top 运行时按“H”键将线程查看模式切换为开或关):

top -H

列出进程号为 PID 的进程创建的所有线程(也可以使用 ps -T -p <pid> 命令查看):

top -H -p <pid>

通过进程名(而不是 PID)列出该进程创建的所有线程:

top -Hp $(pgrep -f <process_name>)