Linux常用命令之top:动态进程排查利器
背景
在运维日常工作中,经常需要排查进程相关问题,就不得说一下top这个常用命令,主要复习相关知识,希望可以帮到大家。
基本信息
时期 | 关键事件 | 意义 |
---|---|---|
1984 | William LeFebvre 在 BSD 4.4 中创造 top | 开创了实时系统监控的先河,将管理员从反复执行静态命令中解放出来。 |
1980s-90s | 被移植到各种 Unix 和 Linux | 成为 Unix/Linux 系统管理员不可或缺的标准工具。 |
Linux 时代 | 基于 /proc 文件系统发展,功能爆炸式增长 | 演化成一个功能极其强大的交互式性能诊断和管理控制台。 |
现代 | 归属于 procps-ng 套件,面临 htop 等工具的竞争 | 依然是所有系统的预装默认工具,在最小化环境(如容器)中因其零依赖而不可替代。 |
基本的指标信息
第 1 行:top - 系统概览
top - 11:06:47
:当前时间。up 104 days, 18:23
:系统已运行时间。这是系统稳定性的第一指标。3 user
:当前登录用户数。load average: 0.01, 0.05, 0.08
:过去 1分钟、5分钟、15分钟的系统平均负载。
深入理解:对于单核CPU,1.00 表示刚好满负荷。超过1表示有进程在排队。对于多核CPU,负载值应除以核心数来评估。例如,4核CPU的负载为4.00才算是满负荷。
第 2 行:Tasks - 进程信息
total
:总进程数。running
:正在运行或等待CPU时间片的进程数。sleeping
:处于睡眠状态的进程数(等待某事件发生,如I/O)。stopped
:被停止的进程数(通常通过 Ctrl+Z 或 kill -STOP)。zombie
:僵尸进程数。这是关键故障指标。
深入理解:僵尸进程是已终止但其父进程尚未回收其资源的进程。少量僵尸通常无害,但数量持续增长表明有应用程序存在 bug,需要排查。
第 3 行:%Cpu(s) - CPU 使用率
us (user)
:用户空间进程占用CPU百分比。sy (system)
:内核空间进程占用CPU百分比。ni (nice)
:被调整过优先级的用户进程占用CPU百分比。id (idle)
:CPU空闲百分比。这是最重要的指标之一,但要注意等待I/O的时间也算空闲。wa (I/O wait)
:CPU等待I/O完成的时间百分比。这是I/O瓶颈的关键指标。如果此值持续很高,说明磁盘或网络I/O可能成为瓶颈。hi(hardware interrupts)
:处理硬件中断所花费的CPU时间。si (software interrupts)
:处理软件中断所花费的CPU时间。st (steal time)
:在虚拟化环境中,被宿主机(Hypervisor)“偷走”的CPU时间。如果此值较高,说明你的虚拟机正在与其他虚拟机激烈争夺物理CPU资源,在云平台环境中,遇到的情况比较多。
第 4/5 行:KiB Mem & KiB Swap - 内存信息(单位:MB)
total
:总内存。free
:完全未被使用的内存。used
:已使用的内存。buff/cache
:被用作缓冲区和缓存的内存。
关键理解:Linux 会利用空闲内存来缓存磁盘数据(cache)和缓冲磁盘读写(buffer),以提升性能。当应用程序需要内存时,这部分内存会被快速回收。因此,评估内存是否充足,不能只看 free,而应主要关注 available(在某些老版本中可能没有,新版本通常有)。
进程列表字段解析(重要!)
PID
:进程ID。USER
:进程所有者。PR (Priority) / NI (Nice)
:进程优先级。NI 值范围从 -20(最高优先级)到 19(最低)。PR = NI + 20。VIRT (Virtual Memory)
:进程使用的虚拟内存总量。包括代码、数据、共享库、交换出去的内存等。非常大是正常的。RES (Resident Memory)
:进程使用的、未被换出的物理内存大小(单位KB)。这是进程实际占用的物理内存,是评估内存占用的核心指标。SHR (Shared Memory)
:共享内存大小。可能来自共享库等。S (Status)
:进程状态。
R = Running / Runnable
S = Interruptible Sleep
D = Uninterruptible Sleep(通常与I/O相关,等待磁盘,需要警惕)
Z = Zombie
T = Stopped%CPU
:进程使用的CPU百分比。注意:在多核CPU上,该值可以超过100%。例如,一个进程完全占满2个核心,其 %CPU 为 200%。%MEM
:进程使用的物理内存占总物理内存的百分比。TIME+
:进程自启动以来使用的总CPU时间。COMMAND
:进程启动命令。默认情况可以当作进程名称来看,在交互页面按c可以把完整命令扩展出来。
默认排序通常按 %CPU,你可以通过 Shift + > 或 < 改变排序字段。按一次 Shift + > 到内存,按一次Shift + < 到进程状态。
常用的使用方法
显示所有CPU信息
top(进入交互模式) —> 按数字1 —> 达成目标
彩色显示,高亮排序的字段信息
top(进入交互模式) —> 依次按 z、b、x —> 达成目标
参数解释:
z
:让页面变成彩色显示。
b
:加粗字体。
x
:高亮显示,排序的列信息。
显示指定用户的进程列表
top(进入交互模式) —> 按u —>输入用户名 —> 达成目标
kill掉指定进程(默认 15)
top(进入交互模式) —> 按k —>输入pid —> 达成目标
显示线程信息
top(进入交互模式) —> 按H —> 达成目标 或者 top -H
top -H -p PID 查看指定pid的线程信息。
PID
:此时显示的是每个线程的ID(TID)。USER
:线程所有者。%CPU
:线程的CPU使用率。%MEM
:线程的内存使用率。TIME+
:线程占用的CPU时间。COMMAND
:线程对应的命令名。按 c 键可切换显示完整命令行,这对于识别具体线程任务非常有帮助。
自定义列信息
top(进入交互模式) —> 按f/F —> 达成目标
基本操作就是,数字上箭头/下箭头选择字段,d/空格来选择是否展示,右箭头表示字段顺序变更,回车确认,s表示默认排序那个字段,可以在指定字段。
结语
top 命令,作为 Linux 系统监控的“瑞士军刀”,其价值远不止于一个简单的任务管理器。它为我们提供了一个透过命令行洞察系统实时状态的窗口,是性能瓶颈分析、故障排查和资源管理的首要入口。
真正的精通,不在于记住所有交互快捷键,而在于理解其输出背后每一个数字的含义,并能将CPU负载、内存使用、I/O等待等指标相互关联,形成一套完整的诊断思路。
尽管如今有了更多现代化、视觉效果更炫酷的工具(如 htop, glances, btop),但 top 因其极致的通用性和近乎零的依赖,依然是所有运维工程师在最关键、最基础的环境中最为信赖的伙伴。它预装在几乎所有*nix系统上,是您深入系统内核、解决复杂问题的坚实起点。
保持手感,常敲常新。愿您能藉由 top 及其他工具,运筹帷幄,洞悉系统之微末,掌控运维之全局。